W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
作為包的成員的類被稱為頂級類。
一個(gè)類可以在另一個(gè)類中聲明。這種類型的類稱為內(nèi)部類。
如果在另一個(gè)類中聲明的類被顯式或隱式聲明為static,它被稱為嵌套類,而不是內(nèi)部類。
包含內(nèi)部類的類稱為封閉類或外部類。
下面的代碼聲明一個(gè)內(nèi)部類。
class Outer { public class Inner { // Members of the Inner class go here } // Other members of the Outer class go here }
Outer類是一個(gè)頂級類。
Inner類是一個(gè)內(nèi)部類。它是外類的成員。
外層類是Inner類的封閉(外部)類。
內(nèi)部類可以是另一個(gè)內(nèi)部類的封閉類。內(nèi)部類的嵌套層次沒有限制。
內(nèi)部類的實(shí)例只能存在于其封閉類的實(shí)例中。
以下是內(nèi)部類的一些優(yōu)點(diǎn)。
下面的代碼演示了訪問局部內(nèi)部類中的局部變量的規(guī)則。
main()方法聲明兩個(gè)局部變量x和y。這兩個(gè)變量都是最終的。
變量x在被初始化之后從不改變,變量y不能被改變,因?yàn)樗宦暶鳛閒inal。
public class Main { public static void main(String... args) { int x = 1; final int y = 2; class LocalInner { void print() { System.out.println("x = " + x); System.out.println("y = " + y); } } /* * Uncomment the following statement will make the variable x no longer * an effectively final variable and the LocalIneer class will not compile. */ // x = 100; LocalInner li = new LocalInner(); li.print(); } }
上面的代碼生成以下結(jié)果。
內(nèi)部類可以繼承另一個(gè)內(nèi)部類,頂級類或其封閉類。
class A { public class B { } public class C extends B { } public class D extends A { } } class E extends A { public class F extends B { } }
Java中的關(guān)鍵字static使一個(gè)構(gòu)造成為一個(gè)頂層結(jié)構(gòu)。
因此,我們不能為內(nèi)部類聲明任何靜態(tài)成員(字段,方法或初始化器)。
允許在內(nèi)部類中有作為編譯時(shí)常量的靜態(tài)字段。
class A { public class B { public final static int DAYS_IN_A_WEEK = 7; // OK public final String str = new String("Hello"); } }
每個(gè)內(nèi)部類都被編譯成一個(gè)單獨(dú)的類文件。
成員內(nèi)部類和靜態(tài)內(nèi)部類的類文件名格式如下:
<outer-class-name>$<member-or-static-inner-class-name>
局部內(nèi)部類的類文件名的格式如下:
<outer-class-name>$<a-number><local-inner-class-name>
匿名類的類文件名的格式如下:
<outer-class-name>$<a-number>
類文件名中的<a-number>是從1開始順序生成的數(shù)字,以避免任何名稱沖突。
我們可以在靜態(tài)上下文中定義一個(gè)內(nèi)部類,例如靜態(tài)方法或靜態(tài)初始化器。
所有靜態(tài)字段成員都可以訪問這樣的內(nèi)部類。
class Outer { static int k = 1; int m = 2; public static void staticMethod() { // Class Inner is defined in a static context class Inner { int j = k; // OK. Referencing static field k // int n = m; // An error. Referencing non-static field m } } }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: