# Java 匿名类

> 原文： [https://www.programiz.com/java-programming/anonymous-class](https://www.programiz.com/java-programming/anonymous-class)

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

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

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

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

```java
class outerClass {

    // defining anonymous class
    object1 = new Type(parameterList) {
         // body of the anonymous class
    };
} 
```

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

在这里，**类型**可以是

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

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

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

* * *

### 示例 1：扩展类的匿名类

```java
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();
   }
} 
```

**输出**

```java
Inside an anonymous class. 
```

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

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

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

* * *

### 示例 2：实现接口的匿名类

```java
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();
   }
} 
```

**输出**：

```java
Inside an anonymous class. 
```

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

* * *

## 匿名类的优点

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

```java
Object = new Example() {
   public void display() {
      System.out.println("Anonymous class overrides the method display().");
   }
}; 
```

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

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