靜態(tài)內(nèi)部類、成員內(nèi)部類、局部?jī)?nèi)部類和匿名內(nèi)部類
-
靜態(tài)內(nèi)部類(Static Inner Class):是指被聲明為static的內(nèi)部類。它可以不依賴于外部類實(shí)例而被實(shí)例化,而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。靜態(tài)內(nèi)部類不能與外部類有相同的名字。不能訪問(wèn)外部類的普通成員變量,只能訪問(wèn)外部類中的靜態(tài)成員和靜態(tài)方法(包括私有類型)
例如:
class outerClass{
static class innerClass{}//靜態(tài)內(nèi)部類
}
-
成員內(nèi)部類(Member Inner Class):一個(gè)靜態(tài)內(nèi)部類,去掉static關(guān)鍵字就成為了成員內(nèi)部類,成員內(nèi)部類為非靜態(tài)內(nèi)部類,它可以自由的引用外部類的屬性和方法,無(wú)論這些屬性和方法是靜態(tài)的還是非靜態(tài)的。但是它與一個(gè)實(shí)例綁定在一起了,不可以定義靜態(tài)的屬性和方法。只有在外部的類被實(shí)例化后,這個(gè)內(nèi)部類才能被實(shí)例化。值得注意的是,非靜態(tài)內(nèi)部類中不能有靜態(tài)成員。
例如:
class outerClass{
class innerClass{}//成員內(nèi)部類
}
-
局部?jī)?nèi)部類(Local Inner Class):指的是定義在一個(gè)代碼塊中的類,它的作用范圍為其所在的代碼塊,是內(nèi)部類中最少使用到的一種類型。局部?jī)?nèi)部類就像局部變量一樣,不能被public、protected、private以及static修飾,只能訪問(wèn)方法中定義為final類型的局部變量。
對(duì)于一個(gè)靜態(tài)內(nèi)部類,去掉其聲明中的static關(guān)鍵字,將其定義移入其外部類的靜態(tài)方法或靜態(tài)初始化代碼塊中就成為了局部靜態(tài)內(nèi)部類。
對(duì)于一個(gè)成員類,將其定義移入其外部類的實(shí)例方法或?qū)嵗跏蓟a塊中就成為了局部類。
局部靜態(tài)內(nèi)部類和靜態(tài)內(nèi)部類的基本特性相同。局部?jī)?nèi)部類和內(nèi)部類的基本特性相同
例如:
class outerClass{
public void menberFunction(){
class innerClass{}//局部?jī)?nèi)部類
}
}
-
匿名內(nèi)部類(Anonymous Inner Class):是一種沒(méi)有類名的內(nèi)部類,不使用關(guān)鍵字class、extends和implements,沒(méi)有構(gòu)造方法,它必須繼承其他類或?qū)崿F(xiàn)其他接口。匿名內(nèi)部類的好處一般是代碼更加簡(jiǎn)潔、緊湊,但帶來(lái)的問(wèn)題是易讀性下降。一般適用于GUI編程中實(shí)現(xiàn)事件處理
public class MyFrame extends Frame {
//外部類
public MyFrame() {
addWindowListener(new WindowAdapter() {
//匿名內(nèi)部類
@Override
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。