寫Java程式就是在設計類別,而這些類別定義都是寫在.java檔案中,當然也可以把很多個類別寫在同一個檔案中。像是下面這樣,這兩個.class檔都是屬於外部類別(outer class)
class Dad{
// code
}
class Son{
// code
}
Java 1.1之後,除了之前講過的一般類別和介面之外,還額外定義了四種內部類別,除了第一種其他都是非static的。
class Dad{
String dadName;
Public Dad(String str){
dadName = str;
}
class Son{
String name;
}
}
如果要宣告內部類別可以用,跟以前宣告物件一樣,只是利用點運算子從外部類別.進内部類別。指定運算子後面,外部物件.new 內部類別建構子()。想要初始化物件,就要告訴它是哪個物件裡面的內部類別,然後一樣呼叫建構子。
// 外部類別.內部類別 物件名稱 = 外部物件.new 建構子();
Dad papa = new Dad("小明");
Dad.Son name = papa.new Son();
那使用內部類別有什麼好處呢?
第一,這樣就可以直接存取外部類別的私有(private)成員,像是在視窗程式中,可以用內部類別來實作一個事件傾聽者類別(Listener),這個視窗傾聽者類別可以直接存取視窗元件,就不用透過參數來傳遞。第二,當某個Slave類別指完全服務於一個Master類別時,可以把它設成內部類別,這樣在使用Master的人就不用知道Slave的存在。
有這種設計就是為了防止別人亂用你的類別外,還可以確保內部的資料備正確的使用。就跟之前提到過的封裝一樣,可以保護程式的安全性、完整性。