內部類
內部類
定義:將一個類定義置入另一個類定義中
用處:利用它可對那些邏輯上相互聯(lián)系的類進行分組,并可控制一個類在另一個類中的“可見性”
public class Parcel1 {
class Contents {
private int i = 11;
public int value() { return i; }
}
class Destination {
private String label;
Destination(String whereTo) {
label = whereTo;
}
String readLabel() { return label; }
}
// Using inner classes looks just like
// using any other class, within Parcel1:
public void ship(String dest) {
Contents c = new Contents();
System.out.println(c.value());
Destination d = new Destination(dest);
System.out.println(d.readLabel());
}
public static void main(String[] args) {
Parcel1 p = new Parcel1();
p.ship("Tasmania");
}
}
利用private內部類,類設計人 員可完全禁止其他人依賴類型編碼逝她,并可將具體的實施細節(jié)完全隱藏起來。
從客戶程序員的角度 來看魄梯,一個接口的范圍沒有意義的俗壹,因為他們不能訪問不屬于公共接口類的任何額外方法
普通(非內部)類不可設為private或protected——只允許public或者default。
內部類可以訪問封裝類的成員般卑,這是如何實現(xiàn)的呢?
內部類必須擁有對封裝類的特定對象的一個引用武鲁,而封裝類的作用就是創(chuàng)建這個內部類。隨后蝠检,當我們引用封裝類的一個成員時沐鼠,就利用那個(隱藏)的引用來選擇那個成員。幸運的是叹谁,編譯器會幫助我們實現(xiàn)所有這些細節(jié)饲梭。但我們現(xiàn)在也可以理解內部類的一個對象只能與封裝類的一個對象聯(lián)合創(chuàng)建。在這個創(chuàng)建過程中焰檩,要求對封裝類對象的引用進行初始化憔涉。若不能訪問那個引用,編譯器就會報錯析苫。進行所有這些操作的時候大多數(shù)時候都不要求程序員的任何介入兜叨。
靜態(tài)內部類
static 內部類意味著:
(1) 為創(chuàng)建一個static內部類的對象,我們不需要一個外部類對象衩侥。
(2) 不能從static內部類的一個對象中訪問一個外部類對象国旷。