透過以往的學習,我們已經知道,類別可以有兩種重要的成員:成員變數和方法,實際上,類別還有一種成員:內部類別。在一個類別中定義另一個類別,我們把這樣的類別稱為內部類,包含內部類別的類別稱為內部類別的外嵌類別。
1)內部類別的外嵌類別的成員變數在內部類別中仍然有效,內部類別中的方法也可以呼叫外嵌類別中的方法。
2)內部類別的類別體中不可以宣告類別變數和類別方法,外嵌類別的類別中可以用內部類別宣告物件作為外嵌類別的成員。
3)內部類別僅供它的外嵌類別使用,其他類別不可以用某個類別的內部類別聲明物件。
因為內部類別的外嵌類別的成員變數在內部類別中有效,所以使得內部類別和外嵌類別的交互作用十分方便。
例如:
classRedCowForm(){}RedCowForm(Strings){cow=newRedCow(88,66,2000);formName=s;}publicvoidshowCowMess(){cow.sRedpeak()}classRedCowM {//內部類別的宣告StringcowName=小牛;intheight,weight,price;RedCow(inth,intw,intp){height=h;weight=w;price=p;}voidspeak(){System.out.println(我+cowName+,身高+height+cm,體重+weight+kg,住在+formName);}}}publicclassMain{publicstaticvoidmain(String[]args){RedCowFormform=newRedCowForm(dotcpp農場);form.showCowMess(); form.cow.speak();}}
運行結果如下:
我是小牛,身高88cm,體重66kg,住在dotcpp農場我是小牛,身高88cm,體重66kg,住在dotcpp農場
注意:Java編譯器產生的內部類別的字節碼檔案的名字和平常的類別的名字不同,內部類別對應的字節碼檔案的名字格式是「外嵌類別名稱$內部類別名稱」。例如:上面範例中內部類別的字節碼檔案的名字應該是RedCowForm$RedCow.class。
內部類別可以被修飾為static內部類,static內部類別是外嵌類別中的靜態資料類型,程式可以在其他類別中使用static內部類別來建立對象,但是,static內部類別不能操作外嵌類別中的實例成員變數。
好了,大家可以上機實驗,消化吸收本節內容。