更新時(shí)間:2022-08-29 10:58:30 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1661次
Java內(nèi)部類在另一個(gè)類(也稱為外部類)中聲明,并且可以訪問外部類的私有成員。編譯器生成一個(gè)作為外部類成員的類,并且正是這個(gè)生成的類可以訪問創(chuàng)建它的范圍內(nèi)的私有變量或方法(例如,在另一個(gè)方法內(nèi))。
靜態(tài)嵌套內(nèi)部類與其他靜態(tài)成員類似,因?yàn)樗鼈儫o法訪問外部類的實(shí)例變量。相反,非靜態(tài)內(nèi)部類可以訪問外部類的實(shí)例變量,因此能夠創(chuàng)建外部類的實(shí)例。
Java 中的內(nèi)部類比傳統(tǒng)類提供了許多好處。它們可用于訪問外部類的私有成員,可用于創(chuàng)建外部類的實(shí)例,還可用于創(chuàng)建匿名內(nèi)部類。
但是,在 Java 中使用內(nèi)部類也有一些缺點(diǎn)。它們會(huì)使您的代碼更難閱讀和調(diào)試,并且會(huì)增加代碼的整體復(fù)雜性。
內(nèi)部類分為四種類型:靜態(tài)、非靜態(tài)、本地和匿名。
靜態(tài)內(nèi)部類
這些是最簡(jiǎn)單的內(nèi)部類。靜態(tài)內(nèi)部類是在類內(nèi)部聲明并標(biāo)記為靜態(tài)的那些。需要注意的是,這些類只能使用外部類的實(shí)例來訪問。您可以利用靜態(tài)嵌套類將相關(guān)類組合在一起。
非靜態(tài)內(nèi)部類
顧名思義,非靜態(tài)內(nèi)部類與外部類的實(shí)例相關(guān)聯(lián)。外部類的所有成員(變量和方法)都可以從這些類中訪問。
本地內(nèi)部類
本地內(nèi)部類在方法中定義。它們可以訪問封閉類的所有成員(變量和方法),但不能從定義它們的方法之外實(shí)例化它們。本地定義的內(nèi)部類只能在其定義的方法內(nèi)實(shí)例化。
方法本地內(nèi)部類只能在定義它的方法內(nèi)訪問,并且不能被定義它的方法之外的任何其他代碼引用。方法局部?jī)?nèi)部類可以從封閉范圍訪問局部變量(包括最終變量)。
匿名內(nèi)部類
沒有名稱的內(nèi)部類也稱為匿名內(nèi)部類。匿名內(nèi)部類的聲明和實(shí)例化同時(shí)發(fā)生。匿名內(nèi)部類不能有顯式構(gòu)造函數(shù),就像所有本地內(nèi)部類一樣。當(dāng)您必須只使用一次本地內(nèi)部類時(shí),匿名內(nèi)部類很有用。
以下是在 Java 中使用內(nèi)部類時(shí)要記住的一些重要事項(xiàng):
內(nèi)部類可以聲明為公共的、私有的或受保護(hù)的。
內(nèi)部類可以擴(kuò)展任何類并實(shí)現(xiàn)任何接口。
需要注意的是,如果一個(gè)內(nèi)部類已經(jīng)被標(biāo)記為靜態(tài),它就不能訪問外部類的非靜態(tài)成員。它可以訪問外部類的靜態(tài)成員。
如果沒有外部類的實(shí)例,就不能創(chuàng)建內(nèi)部類或嵌套類的實(shí)例。
內(nèi)部類可用于編寫更模塊化和可重用的代碼。
以下代碼示例說明了如何在 Java 中實(shí)現(xiàn)內(nèi)部類:
公共類 MyOuterClass {
公共類 MyInnerClass {
公共無效顯示(){
System.out.println("內(nèi)部類");
}
}
公共靜態(tài)無效主要(字符串[]參數(shù)){
MyOuterClass objOuterClass = new MyOuterClass();
MyOuterClass.MyInnerClass objInnerClass = objOuterClass.new MyInnerClass();
objInnerClass.display();
}
}
以下代碼清單說明了如何在 Java 中實(shí)現(xiàn)靜態(tài)內(nèi)部類:
導(dǎo)入 java.util.*;
類 MyOuterClass {
私有靜態(tài)無效方法A()
{
System.out.println("MyOuterClass 的內(nèi)部方法A");
}
靜態(tài)類 MyInnerClass {
公共靜態(tài)無效方法B()
{
System.out.println("MyInnerClass 的內(nèi)部方法B");
方法A();
}
}
}
公共類 InnerClassDemo {
公共靜態(tài)無效主(字符串參數(shù) [])
{
MyOuterClass.MyInnerClass obj = new MyOuterClass.MyInnerClass();
obj.methodB();
}
}
以上就是關(guān)于“Java內(nèi)部類的介紹及作用”的介紹,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java基礎(chǔ)教程,里面的課程內(nèi)容細(xì)致全面,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)