- 如果要從外部類的成員方法之外訪問內(nèi)部類类溢,需要用outer.inner的方式引用洽损。
- 內(nèi)部類引用自己的方式是this,引用外部類的方式是outer.this。
- 內(nèi)部類可以引用外部類的成員蛙奖,要引用其他外部對象的時(shí)候,此對象必須是final的乓搬。
- 可以用.new來讓某個(gè)外部類對象去創(chuàng)建其內(nèi)部類對象商源。如:Outer.Inner inner = outer.new Inner();,不能跳過外部類對象直接創(chuàng)建內(nèi)部類對象驻子。
- 匿名內(nèi)部類:
public class A {
private class AA { }
public AA getAA() {
// 創(chuàng)建一個(gè)匿名內(nèi)部類灿意,此類繼承AA
return new AA() {
private int ii = 0;
};
}
}
- 匿名內(nèi)部類想要有構(gòu)造函數(shù)的話,可以把代碼放在構(gòu)造代碼塊崇呵。
- 內(nèi)部類(Inner Class):在方法作用域或類作用域中的類缤剧,可以定義在任何作用域中。若為匿名的域慷,則為匿名內(nèi)部類荒辕。
- 嵌套類(Nested Class):即static的內(nèi)部類,嵌套類不能訪問外圍類的對象犹褒。
- 內(nèi)部類與嵌套類的區(qū)別:內(nèi)部類的保留了外圍類的引用抵窒,可以訪問外圍類的對象。嵌套類則相反叠骑。
- 嵌套類不保留外圍類的引用李皇,所以不能用outer.inner的方式引用,也不能用使用.new的方式創(chuàng)建座云。
- 在接口中的類也是嵌套類疙赠,盡管沒有static修飾(自動static)。
- java不能多重繼承朦拖,只能單繼承圃阳,但是可以其他要繼承的類作為Java的內(nèi)部類來間接實(shí)現(xiàn)。
- 繼承別的外圍類的內(nèi)部類:
class WithInner {
class Inner {}
}
// 繼承外圍類的內(nèi)部類
public class InheritInner extends WithInner.Inner {
InheritInner(WithInner wi) {
wi.super();
}
}
- 局部內(nèi)部類(方法內(nèi))與匿名內(nèi)部類的區(qū)別是:
- 局部內(nèi)部類有名字能創(chuàng)建多個(gè)對象璧帝。
- 局部內(nèi)部類有名字能有多個(gè)構(gòu)造器捍岳。
- 匿名內(nèi)部類只能用構(gòu)造代碼塊來構(gòu)造。
public class A {
Counter getCounter(final String name) {
// 局部內(nèi)部類可以使用構(gòu)造器來構(gòu)造
class LocalCounter implements Counter {
private LocalCounter() {
System.out.print("LocalCounter()");
}
}
return new LocalCounter();
}
Counter getCounter2(final String name) {
// 匿名內(nèi)部類只能用構(gòu)造代碼塊構(gòu)造
return new Counter() {
{
System.out.print("Counter()");
}
};
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者