Java內部類(一)——匿名內部類
阿新 • • 發佈:2018-12-31
Java匿名內部類
顧名思義,就是沒有名字的內部類。表面上看起來它們似乎有名字,實際上不是它們的名字。 ——百度百科
特性說明
- 沒有名字的類
- 既然這個類沒有名字,那麼就只能使用一次,進而簡化程式碼編寫
- 前提條件:必須繼承一個父類或者實現一個介面
宣告格式
new ParentName(){
... // 內部類的定義
}
例項分析
abstract class Animal {
public abstract void run();
}
class Fish extends Animal {
public void run() {
System.out.println("Swimming!");
}
}
public class Main {
public static void main(String[] args) {
Fish fish = new Fish();
fish.run();
}
}
// 執行結果:Swimming!
如果我們這個類只使用一次,那麼我們建立這樣一個類豈不是很浪費?所以就有了匿名內部類的出現。
abstract class Animal {
public abstract void run();
}
public class Main {
public static void main(String[] args) {
Animal fish = new Animal(){
public void run() {
System.out.println("Swimming!");
}
};
}
}
// 執行結果:Swimming!
對於介面,和抽象類的使用是一樣的。
也就是說,只要一個類是抽象的或是一個介面,那麼其子類中的方法都可以使用匿名內部類來實現。最常用的情況就是在多執行緒的實現上,因為要實現多執行緒必須繼承Thread類或是繼承Runnable介面。
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(){
@Override
public void run(){
System.out.println("你好,匿名內部類!");
}
}
thread.start();
}
}
// 執行結果:你好,匿名內部類!
注意事項
- 使用匿名內部類時,必須是繼承一個類或者實現一個介面,但是兩者不可兼得。
- 匿名內部類中不能定義建構函式。
- 匿名內部類中不能存在任何的靜態成員變數和靜態方法。
- 匿名內部類不能是抽象的,它必須要實現繼承的類或者實現的介面的所有抽象方法。