為什麼需要內部類,內部類的作用
在最初,內部類看起來就像是一種內部隱藏機制:將類置於其他類的內部。但是,內部類遠不止如此,它瞭解外圍類,並能與之通訊,而且你用內部類寫出的程式碼優雅而清晰。
內部類的程式碼操作建立它的外圍類的物件,所以可以認為內部類提供了某種進入外圍類的視窗。一般來說,內部類繼承某個類或者實現某個介面。每個內部類都能獨立地繼承一個介面的實現,所以無論外圍類是否已經繼承了某個介面的實現,對於內部類都是沒有影響的。
考慮這樣一種情形:必須在一個類中以某種方式實現兩個介面。由於介面的靈活性,你有兩種選擇:使用單一類,或者實現內部類。
兩個介面為:
interface A{}
interface B{}
我們可以選擇單一類:
class X implements A, B{}
或者內部類:
class Y implements A{
B makeB(){
return new B() {};
}
}
然而,如果擁有的是抽象類或者是具體的類,而不是介面呢?我們知道,類只能繼承一個類,這個時候就只能使用內部類才能實現多重繼承了。
class A {}
abstract B {}
class C extends A{
B makeB() {
return new B() { };
}
}
public class E{
static void takesA( A a){ }
static void takesB(B b){ }
public static void main(String [] args ){
C c = new C();
takesA(c);
takesB(c,makeB);
}
}
也就是說,內部類實現了“多重繼承”,內部類允許繼承多個非介面型別(類或者抽象類)。