Java中定义了几种类型的匿名内部类?
一个匿名内部类是声明一个内部类没有任何类名的。换句话说,一个无名的内部类称为匿名内部类。由于它没有名称,因此它不能具有构造函数, 因为我们知道构造函数名称与类名称相同。
我们可以定义一个匿名内部类,并一步一步使用new 运算符创建其对象。
语法
new(argument-list){
//匿名类正文
}Java匿名内部类的类型
扩展类的匿名内部类
实现接口的匿名内部类
匿名内部类作为参数
扩展类的匿名内部类
在这里,新 关键字用于创建匿名内部类的对象,该对象具有父类类型的引用。
示例
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