跳到主要内容

Java 匿名类

提示
  1. 匿名类的定义:Java 中的匿名类是没有名称的嵌套类,通常在另一个类内部定义,并且扩展另一个类或实现接口。
  2. 创建匿名类:匿名类通过 new Type(parameterList) { // 匿名类主体 } 的语法创建,其中 Type 是匿名类扩展的超类或实现的接口。
  3. 匿名类的用途:匿名类用于创建具有特定任务的一次性对象,使代码更简洁,常用于覆盖方法或实现接口的临时需求。

在 Java 中,一个类可以包含另一个被称为嵌套类的类。可以创建一个没有任何名称的嵌套类。

没有任何名称的嵌套类被称为匿名类。

匿名类必须在另一个类内部定义。因此,它也被称为匿名内部类。其语法为:

class outerClass {

// 定义匿名类
object1 = new Type(parameterList) {
// 匿名类的主体
};
}

匿名类通常扩展子类或实现接口。

这里,Type 可以是

  1. 匿名类扩展的超类
  2. 匿名类实现的接口

上述代码在运行时创建了一个匿名类的对象 object1

注意: 匿名类是在表达式中定义的。因此,匿名类的末尾使用分号来表示表达式的结束。

示例 1:匿名类扩展一个类

class Polygon {
public void display() {
System.out.println("在 Polygon 类内部");
}
}

class AnonymousDemo {
public void createClass() {

// 创建扩展 Polygon 类的匿名类
Polygon p1 = new Polygon() {
public void display() {
System.out.println("在一个匿名类内部。");
}
};
p1.display();
}
}

class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}

输出

在一个匿名类内部。

在上述示例中,我们创建了一个名为 Polygon 的类。它有一个方法 display()

然后我们创建了一个扩展 Polygon 类并重写 display() 方法的匿名类。

当我们运行程序时,创建了一个匿名类的对象 p1。该对象随后调用了匿名类的 display() 方法。

示例 2:匿名类实现一个接口

interface Polygon {
public void display();
}

class AnonymousDemo {
public void createClass() {

// 实现接口的匿名类
Polygon p1 = new Polygon() {
public void display() {
System.out.println("在一个匿名类内部。");
}
};
p1.display();
}
}

class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}

输出

在一个匿名类内部。

在上述示例中,我们创建了一个实现 Polygon 接口的匿名类。

匿名类的优势

在匿名类中,对象在需要时创建。也就是说,对象被创建用于执行某些特定任务。例如,

Object = new Example() {
public void display() {
System.out.println("匿名类覆盖了 display() 方法。");
}
};

这里,当我们需要覆盖 display() 方法时,会动态地创建一个匿名类的对象。

匿名类还有助于我们使代码更简洁。