Java中定义了多少种类型的匿名内部类?
一个**匿名内部类**是一个根本**没有类名**声明的内部类。换句话说,一个无名内部类被称为**匿名内部类**。因为它没有名称,所以它不能有**构造函数**,因为我们知道构造函数名称与类名相同。
我们可以同时定义一个**匿名内部类**并使用**new**运算符创建其对象,一步完成。
语法
new(argument-list){ // Anonymous class body }
Java中匿名内部类的类型
- 扩展类的匿名内部类
- 实现接口的匿名内部类
- 作为参数的匿名内部类
扩展类的匿名内部类
这里使用**new**关键字创建**匿名内部类**的对象,该对象具有**父类类型的引用**。
示例
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
实现接口的匿名内部类
这里使用**new**关键字创建**匿名内部类**的对象,该对象具有**接口类型的引用**。
示例
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
广告