Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - 匿名类



Java 匿名类

Java 中的匿名类是一个内部类,它根本没有声明任何类名。换句话说,Java 中的无名内部类称为匿名内部类。因为它没有名称,所以它不能有构造函数,因为我们知道构造函数名称与类名相同。

Java 匿名内部类的用途

当您想要创建一个简单的,并且该类仅针对特定目的使用一次时,可以使用匿名内部类。例如,实现一个接口或扩展一个类。

在 Java 中定义匿名类

您可以定义一个匿名内部类并同时使用new 运算符一步一步创建其对象。

语法

匿名嵌套类的语法如下所示:

new(argument-list){
   // Anonymous class body
}

Java 中匿名内部类的类型

  • 扩展类的匿名内部类

  • 实现接口的匿名内部类

  • 作为参数的匿名内部类

1. 扩展类的匿名内部类

您可以使用匿名内部类来扩展 Java 中的类。

示例:扩展类的匿名内部类

在以下示例中,我们使用new 关键字创建一个匿名内部类的对象,该对象具有父类类型的引用。

package com.tutorialspoint;

class Car {
   public void engineType() {
      System.out.println("Turbo Engine");
   }
}
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 Engine");
         }
      };
      c2.engineType();
   }
}

输出

如果您编译并执行上述程序,您将获得以下结果:

Turbo Engine
V2 Engine

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("Software Developed in Java");
         }
      };
      s.develop();
      System.out.println(s.getClass().getName());
   }
}

输出

如果您编译并执行上述程序,您将获得以下结果:

Software Developed in 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("Turbo Engine");
         }
      });
   }
}

输出

如果您编译并执行上述程序,您将获得以下结果:

Turbo Engine
广告