Java中定義了多少種類型的匿名內部類?


一個**匿名內部類**是一個根本**沒有類名**宣告的內部類。換句話說,一個無名內部類被稱為**匿名內部類**。因為它沒有名稱,所以它不能有**建構函式**,因為我們知道建構函式名稱與類名相同。

我們可以同時定義一個**匿名內部類**並使用**new**運算子建立其物件,一步完成。

語法

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

Java中匿名內部類的型別

  • 擴充套件類的匿名內部類
  • 實現介面的匿名內部類
  • 作為引數的匿名內部類

擴充套件類的匿名內部類

這裡使用**new**關鍵字建立**匿名內部類**的物件,該物件具有**父類型別的引用**。

示例

線上演示

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


實現介面的匿名內部類

這裡使用**new**關鍵字建立**匿名內部類**的物件,該物件具有**介面型別的引用**。

示例

線上演示

interface Software {
   public void develop();
}
public class AnonymousClassDemo1 {
   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
AnonymousClassDemo1$1


作為引數的匿名內部類

我們可以使用**匿名內部類**作為引數,以便將其**傳遞給方法或建構函式**。

示例

線上演示

abstract class Engine {
   public abstract void engineType();
}
class Vehicle {
   public void transport(Engine e) {
      e.engineType();
   }
}
public class AnonymousInnerClassDemo2 {
   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

更新於:2020年2月11日

1K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告