在Java中,一个类可以包含另一个类,称为嵌套类。可以创建一个没有名称的嵌套类。
没有名称的嵌套类称为匿名类。
匿名类必须定义在另一个类中。因此,它也称为匿名内部类。其语法是
class outerClass {
// defining anonymous class
object1 = new Type(parameterList) {
// body of the anonymous class
};
}
匿名类通常扩展子类或实现接口。
在这里,Type可以是
- 匿名类扩展的超类
- 匿名类实现的接口
上面的代码在运行时创建了一个匿名类对象object1
。
注意:匿名类定义在表达式中。因此,在匿名类末尾使用分号来表示表达式的结束。
示例 1:扩展类的匿名类
class Polygon {
public void display() {
System.out.println("Inside the Polygon class");
}
}
class AnonymousDemo {
public void createClass() {
// creation of anonymous class extending class Polygon
Polygon p1 = new Polygon() {
public void display() {
System.out.println("Inside an anonymous class.");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
输出
Inside an anonymous class.
在上面的示例中,我们创建了一个名为Polygon的类。它有一个名为display()
的方法。
然后,我们创建了一个扩展Polygon类并覆盖display()
方法的匿名类。
当我们运行程序时,会创建一个匿名类的对象p1。然后该对象调用匿名类的display()
方法。
示例 2:实现接口的匿名类
interface Polygon {
public void display();
}
class AnonymousDemo {
public void createClass() {
// anonymous class implementing interface
Polygon p1 = new Polygon() {
public void display() {
System.out.println("Inside an anonymous class.");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
输出
Inside an anonymous class.
在上面的示例中,我们创建了一个实现Polygon
接口的匿名类。
匿名类的优点
在匿名类中,对象在需要时创建。也就是说,创建对象是为了执行一些特定的任务。例如,
Object = new Example() {
public void display() {
System.out.println("Anonymous class overrides the method display().");
}
};
在这里,当我们需要覆盖display()
方法时,会动态创建一个匿名类的对象。
匿名类还有助于使我们的代码更简洁。
另请阅读