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
廣告