一个匿名内部类是声明一个内部类没有任何类名的。换句话说,一个无名的内部类称为匿名内部类。由于它没有名称,因此它不能具有构造函数, 因为我们知道构造函数名称与类名称相同。
我们可以定义一个匿名内部类,并一步一步使用new 运算符创建其对象。
new(argument-list){ //匿名类正文 }
扩展类的匿名内部类
实现接口的匿名内部类
匿名内部类作为参数
在这里,新 关键字用于创建匿名内部类的对象,该对象具有父类类型的引用。
class Car { public void engineType() { System.out.println("Turbo Engine"); } } public class AnonymousClassDemo { public static void main(String args[]) { Car c1 = new Car(); c1.engineType(); Car c2 = new Car() { @Override public void engineType() { System.out.println("V2 Engine"); } }; c2.engineType(); } }
输出结果
Turbo Engine V2 Engine
在这里,新 关键字用于创建匿名内部类的对象,该对象具有接口类型的引用。
interface Software { public void develop(); } public class AnonymousClassDemo1 { public static void main(String args[]) { Software s = new Software() { @Override public void develop() { System.out.println("Software Developed in Java"); } }; s.develop(); System.out.println(s.getClass().getName()); } }
输出结果
Software Developed in Java AnonymousClassDemo1$1
我们可以使用匿名内部类作为参数,以便可以将其 传递给方法或构造函数。
abstract class Engine { public abstract void engineType(); } class Vehicle { public void transport(Engine e) { e.engineType(); } } public class AnonymousInnerClassDemo2 { public static void main(String args[]) { Vehicle v = new Vehicle(); v.transport(new Engine() { @Override public void engineType() { System.out.println("Turbo Engine"); } }); } }
输出结果
Turbo Engine