內部類
在乙個類中定義兩個類,則其中任何乙個類都不在另乙個類的內部;如果在類中在定義乙個類,則稱類中再定義的那個類為內部類,內部類可以分為成員內部類,區域性內部類,匿名類。
11.5.1 成員內部類
1.簡介
在乙個類中使用內部類,可以在內部類中直接訪問其所在類的私有成員變數。
承運內部類的語法如下:
public
class
outclass
}
在內部類中可以隨意使用外部類的成員方法一級變數,儘管他們被修飾為private。但他們可以任意使用外部類的類成員。
內部類的例項一定要繫結在外部類的例項上,若從外部類初始化乙個內部類物件,那麼內部類物件就會繫結在外部類的物件上。內部類初始化的方式變化與其他類初始化方式相同,都是使用new關鍵字。
如果在外部類和非靜態方法之外例項化內部類物件,需使用外部類。內部類的形式指定該對像的型別。
內部類物件會依賴於外部類物件,除非已經存在乙個外部類形象,否則類中不會出現內部類物件。
2.內部類向上轉型為介面
如果將乙個許可權修飾符為private的內部類向上轉型為其父物件,或者直接向上轉型為乙個介面,在程式中完全隱藏內部類的具體實現過程。可以在外部提供乙個介面,在介面中宣告了乙個方法。如果在實現該介面的內部類中實現該介面的方法,就可以定義多個內部類以不同的方式實現介面中的同乙個方法,二在一般的類中是不能多次實現介面中同一方法的,二這些技巧經常被應用在swing程式設計中,可以在乙個類中做出多個不同的響應事件。
非內部類不能被宣告為private或protected型別
3.使用this關鍵字獲取內部類與外部類的引用
如果在外部類中定義的成員變數與內部類成員變數相同時可以使用this關鍵字
在類中,如果遇到內部類與外部類的成員變數重名的情況,可以使用this關鍵字進行處理;
在記憶體中所有的物件均被放置在隊中,方法一級方法中的形參或區域性變數放置在棧中在內部類的物件與外部類的物件是相互依賴的,類名.this物件指向外部類的物件
11.5.2 內部區域性類
內部類不僅可以在類中進行定義,也可以在類的區域性位置定義,如在類的方法或任意的作用域中均可以定義內部類.
在內部區域性類方法的外部不能方法該內部類,但該內部類可以訪問當前**塊的常量一級此外部類的所有成員。
如果在方法體中使用區域性變數,該劇不變數需要設定為final型別,換句話說,在方法中定義的內部類智慧型訪問方法中的final型別的區域性變數,這是因為在方法中定義區域性變數相當於乙個常量,他的生命週期遠遠超過方法的願你選哪個週期,由於該區域性變數被設定為final,所以不能在內部類中改變該劇不變數的值.
11.5.3 匿名內部類
在方法中首先返回乙個outerinte***ce2的引用,然後在return語句中插入乙個定義內部類的**,由於這個類沒有名稱,所以將該內部類稱為匿名內部類。此類的作用就是建立乙個實現與outine***ce介面的匿名類的物件
匿名類的所有實現**都需要在大括號之間進行編寫,語法如下:
return
newa
其中a指的是類名
由於匿名內部類沒有名稱所有匿名內部類使用預設的構造方法類生成outerinte***ce2物件,在匿名內部類定義階段狐猴,需要加分號進行便是,這個分號你代表內部類的結束,二十代表outerinte***ce2引用表示式的建立。
匿名內部類編譯後,會產生以「外部類名$序號」為名稱的.class檔案,序號以1n排列,分別代表1n個匿名類。
11.5.4 靜態內部類
在內部類前加修飾符static,這個累就程式設計內部靜態類了;乙個靜態內部類中可以宣告static成員,但是在非靜態內部類中不可宣告靜態成員。
靜態內部類的最大特點就是不可以使用外部類的非靜態成員,所以靜態內部類在程式開發中較為少見。
可以這樣認為,普通的內部類物件一四年hi的在外部儲存了乙個引用,只想建立他的外部類物件,但如果內部類被定義為static 就會有更多限制,靜態內部類具有一下特點:
如果建立靜態內部類的物件不需要其外部類物件
不能從靜態內部類的物件中訪問非靜態外部類的物件
11.5.5 內部類繼承
內部類和普通類一樣,可以被繼承,但是內部類的繼承較為複雜,需要設定專門的語法來完成。
在某個類繼承內部類時,必須硬性的給予這個類乙個帶引數構造方法,並且該構造方法的引數為需要繼承內部類的外部類的引用,同時在構造體中使用a.super();語句,這樣才為繼承提供了必要的物件引用。
內部類學習筆記
案例演示 成員內部類使用 public class test class outer 案例演示 靜態內部類使用 public class test class outer 案例演示 區域性內部類使用 public class test class outer 建立區域性內部類物件 inner inn...
JAVA學習筆記10 內部類 匿名內部類
內部類 內部類可以直接訪問外部類成員 包括私有成員 外部類要訪問內部類中的成員必須要建立內部類的物件 class outer public void method 內部類一般用於類的設計 分析事物時 發現該事物描述中還有事物 而且這個事物還在訪問被描述事物的內容 這時就可以將還有的事物用內部類來描述...
JavaSE學習筆記 內部類
一,什麼是內部類?將類定義在類中,該類就是類部類.二,訪問許可權.內部類可以直接訪問外部類中的成員。外部類想要訪問內部類,需要建立內部類物件。三,什麼時候使用內部類。有a類和b類,當a類想要直接訪問b類中的成員,而b類又需要建立a類的物件來訪問a類中的成員。這時,就將a類定義成b類的內部類。例子 孫...