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