Java 匿名类

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

Java 匿名内部类的使用

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

在Java中定义匿名类

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

语法

匿名嵌套类的语法如下 -

new(argument-list){
   // 匿名类主体
} 

Java 中匿名内部类的类型

  • 匿名内部类扩展类

  • 实现接口的匿名内部类

  • 作为参数的匿名内部类

1.扩展类的匿名内部类

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

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

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

package com.yxjc123;

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.yxjc123;

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.yxjc123.Tester$1 

3。匿名内部类作为参数

我们可以使用匿名内部类作为参数,以便将其传递给方法或构造函数。

示例:匿名内部类作为参数

在下面的示例中,我们将匿名内部类作为参数传递给一个方法。

package com.yxjc123;

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