Java 中的匿名类是指声明时不带有任何类名的内部类。换句话说,在 Java 中一个没有名字的内部类被称为匿名内部类。因为它没有名字,所以不能拥有构造函数,因为我们知道构造函数的名字必须与类名相同。
Java 匿名内部类的用途
当您想要创建一个仅用于特定目的并且只需使用一次的简单类时,可以使用匿名内部类。例如,实现一个接口或扩展一个类。
在 Java 中定义匿名类
您可以使用 new
操作符在同一步骤中定义匿名内部类并创建其对象。
语法
匿名嵌套类的语法如下:
new(参数列表) {
}
Java 中匿名内部类的类型
1. 扩展类的匿名内部类
您可以使用匿名内部类在 Java 中扩展一个类。
示例:扩展类的匿名内部类
在下面的例子中,我们使用 new
关键字创建了一个具有父类类型的引用的匿名内部类的对象。
package com.tutorialspoint;
class Car {
public void engineType() {
System.out.println("涡轮发动机");
}
}
public class Tester {
public static void main(String args[]) {
Car c1 = new Car();
c1.engineType();
Car c2 = new Car() {
@Override
public void engineType() {
System.out.println("V2 发动机");
}
};
c2.engineType();
}
}
输出:
如果您编译并执行上述程序,您将得到以下结果:
涡轮发动机
V2 发动机
2. 实现接口的匿名内部类
您可以使用匿名内部类在 Java 中实现一个接口。
示例:实现接口的匿名内部类
在下面的例子中,我们使用 new
关键字创建了一个具有接口类型的引用的匿名内部类的对象。
package com.tutorialspoint;
interface Software {
public void develop();
}
public class Tester {
public static void main(String args[]) {
Software s = new Software() {
@Override
public void develop() {
System.out.println("使用 Java 开发的软件");
}
};
s.develop();
System.out.println(s.getClass().getName());
}
}
输出:
如果您编译并执行上述程序,您将得到以下结果:
使用 Java 开发的软件
com.tutorialspoint.Tester$1
3. 作为参数的匿名内部类
我们可以将匿名内部类用作参数,以便可以将其传递给方法或构造函数。
示例:作为参数的匿名内部类
在下面的例子中,我们将一个匿名内部类作为参数传递给一个方法。
package com.tutorialspoint;
abstract class Engine {
public abstract void engineType();
}
class Vehicle {
public void transport(Engine e) {
e.engineType();
}
}
public class Tester {
public static void main(String args[]) {
Vehicle v = new Vehicle();
v.transport(new Engine() {
@Override
public void engineType() {
System.out.println("涡轮发动机");
}
});
}
}
输出:
如果您编译并执行上述程序,您将得到以下结果:
涡轮发动机