原文: https://www.programiz.com/java-programming/anonymous-class

在本教程中,您将借助示例学习 Java 中的匿名类。

在 Java 中,一个类可以包含另一个称为嵌套类的类。 可以在不提供任何名称的情况下创建嵌套类。

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

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

  1. class outerClass {
  2. // defining anonymous class
  3. object1 = new Type(parameterList) {
  4. // body of the anonymous class
  5. };
  6. }

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

在这里,类型可以是

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

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

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


示例 1:扩展类的匿名类

  1. class Polygon {
  2. public void display() {
  3. System.out.println("Inside the Polygon class");
  4. }
  5. }
  6. class AnonymousDemo {
  7. public void createClass() {
  8. // creation of anonymous class extending class Polygon
  9. Polygon p1 = new Polygon() {
  10. public void display() {
  11. System.out.println("Inside an anonymous class.");
  12. }
  13. };
  14. p1.display();
  15. }
  16. }
  17. class Main {
  18. public static void main(String[] args) {
  19. AnonymousDemo an = new AnonymousDemo();
  20. an.createClass();
  21. }
  22. }

输出

  1. Inside an anonymous class.

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

然后,我们创建了一个匿名类,该类扩展了Polygon类并覆盖了display()方法。

当我们运行程序时,将创建匿名类的对象p1。 然后,对象调用匿名类的display()方法。


示例 2:实现接口的匿名类

  1. interface Polygon {
  2. public void display();
  3. }
  4. class AnonymousDemo {
  5. public void createClass() {
  6. // anonymous class implementing interface
  7. Polygon p1 = new Polygon() {
  8. public void display() {
  9. System.out.println("Inside an anonymous class.");
  10. }
  11. };
  12. p1.display();
  13. }
  14. }
  15. class Main {
  16. public static void main(String[] args) {
  17. AnonymousDemo an = new AnonymousDemo();
  18. an.createClass();
  19. }
  20. }

输出

  1. Inside an anonymous class.

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


匿名类的优点

在匿名类中,只要需要就创建对象。 即,创建对象以执行某些特定任务。 例如,

  1. Object = new Example() {
  2. public void display() {
  3. System.out.println("Anonymous class overrides the method display().");
  4. }
  5. };

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

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