1. 程式人生 > >Java內部類(一)——匿名內部類

Java內部類(一)——匿名內部類

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();
    }
}

// 執行結果:你好,匿名內部類!

注意事項

  • 使用匿名內部類時,必須是繼承一個類或者實現一個介面,但是兩者不可兼得。
  • 匿名內部類中不能定義建構函式。
  • 匿名內部類中不能存在任何的靜態成員變數和靜態方法。
  • 匿名內部類不能是抽象的,它必須要實現繼承的類或者實現的介面的所有抽象方法。