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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP