-
什麼是內部類別?
- 巢狀類別分為兩種類型:靜態和非靜態。
- 聲明為靜態的巢狀類別稱為靜態巢狀類別。
- 嵌套的非靜態類別稱為內部類別。
-
匿名內部類別編譯成什麼?
到內部非靜態類
-
final
建立匿名類別時為什麼要使用關鍵字?如果定義了匿名內部類別並且需要使用該內部類別外部定義的對象,則編譯器要求將傳遞給它們的參考聲明為不可變的(最終的)。如果沒有這樣的聲明,您在編譯程式時將會收到錯誤。
-
如何正確建立內部類別物件?
內部(非靜態)類,如變數和方法,與外部類別的物件相關聯。內部類別也可以直接存取外部類別的欄位。此類類別不能包含靜態方法和欄位。如果沒有外部類別的實例,內部類別就不可能存在。建立物件:
Outer outer = new Outer(); Innter inner = outer.new Inner();
-
如何正確建立嵌套類別的物件?
建立嵌套類別物件的語法是:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
-
是否可以在內部類別中建立靜態方法/變數?
靜態方法/變數不能在內部類別(不是嵌套類別)中聲明。
內部(非靜態)類,如變數和方法,與外部類別的物件相關聯。此類類別不能包含靜態方法和欄位。
-
說出任三個內部類別的名稱?
private static class Holder
HashMap
—來自 的嵌套類別java.util
。- 該介面
Map
有interface Entry<K,V>
,它又在另一個嵌套類別中HashMap
並在另一個嵌套類別中實現static class Entry<K,V> implements Map.Entry<K,V>
。 private static class IntegerCache
在班上Integer
。
-
Java內部類別如何解決多重繼承問題?
因為 Java中禁止類別的多重繼承;這個問題借助內部類別來解決:在我們需要的類別中,聲明一個內部類,並從所需的類別繼承它。例子:
class Tiger extends Cat { public void tigerRun() { ..... } public void startTiger() { TigerThread thread = new TigerThread(); thread.start(); } class TigerThread extends Thread { public void run() { tigerRun(); } } }
-
基於介面的匿名類別和基於類別的匿名類別有什麼區別?
根據 JLS 15.9.5 的匿名類別是一個將新類別的宣告及其初始化組合在一起的表達式:
- 聲明類別時,將建立一個新類,該類別在用作另一個類別的基類時派生自指定類,或在用作介面的基類時實作該介面。
- 在初始化期間,將建立一個新物件並傳回一個引用:匿名類別是具體的。
因此,基於介面和基於類別的匿名類別的唯一區別是需要實現的抽象方法的數量。
Инициализации анонимного класса на основе интерфейса потребует реализации каждого метода, в то время How при инициализации анонимного класса на основе абстрактного/конкретного класса позволит изменить поведение за счет перегрузки методов и потребует реализации абстракных методов.
-
Можно ли создать анонимный статический вложенный класс?
Нет, статической становится только переменная, но не класс.
GO TO FULL VERSION