為什麼使用內部類:可實現「多重繼承」
1、在某一外圍類裡定義,可以在乙個方法裡面或者在任意的作用域內定義內部類。
2、如果想在外部類的非靜態方法之外的任意位置建立某個內部類的物件,需要具體指明這個物件的型別,outerclassname.innerclassname
3、需要建立內部類(非static類)的物件時,需用外部類物件來建立,即需先建立乙個外部類物件.如
outerclassname a= new outerclassname();
outerclassname.innerclassname b=a.new innerclassname();
4、當生能乙個內部類物件時,這個物件就能訪問其外圍物件的所有成員而不需要其他任何條件,此外,內部類也擁有了其外圍類的所有元素訪問權。
5、如果要生成對外部類物件的引用,可以用外部類名緊跟圓點和this(.this)。
6、內部類屬於外部類的成員,故可以用private關鍵字修飾,被private修飾後,在其他類中則不能通過外部類物件來直接.new內部類物件。要定義方法來獲取。
7、匿名內部類:(匿名內部類必須寫在方法裡,因為它其實是一段特殊的執行語句)
①在外部類方法中,方法的返回值類的物件生成與類的定義結合在一起,但是類是沒有名字的:return new classname();注意這是乙個語句,後面分號不能掉。意思是建立乙個繼承自classname的匿名類物件,其返回的引用會自動被向上轉型為其父類classname。
②上面使用了預設構造器classname()建立了物件,當classname中構造器需要傳入引數,只需將適合的引數傳入即可,如return new classname(x);
③匿名類中定義欄位時還能用來對其進行初始化。
④匿名內部類如果需要使用乙個在其外部定義的引數(比如其外部方法中傳入的引數),那麼這個引數必需是final的。如果匿名內部類中從未使用過,則可以不是final的。
⑤匿名內部類與正規的繼承相比有些受限,因為匿名內部類既可以擴充套件類,也可以實現介面,但是不能兩都兼備,而且如果是實現介面,也只能實現乙個介面!
8、內部類與工廠設計模式:(後續理解再寫)
9、巢狀類:如果不需要內部類物件與其外部類物件之間有聯絡,則可宣告內部類為static
普通的內部類物件,隱式地儲存了乙個引用指向建立它的外部類。但static修飾後則不是這樣了:①要建立巢狀類物件,不再需要其外部類的物件了。②不能從巢狀類的物件中訪問非靜態的外部類物件。
巢狀類與普通內部類還有區別:普通內部類的字段和方法只能放在類的外部層次上,所以普通內部類不能有static欄位和static方法,也不能包含巢狀類。而巢狀類可以包含所有這些東西。
10、介面內部的類:預設為static類。還可實現外圍介面。如果想要建立某些公共**,使得它們能被某個介面的所有的不同實現所共用,這樣就可以使用介面內部的巢狀類。
學習筆記4(內部類總結)
內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...
java學習筆記 4 內部類
內部類 1 成員內部類 成員內部類作為外部類的乙個成員存在,與外部類的屬性,方法並列。public class outer1 其中inner1為乙個成員內部類,成員內部類可以無條件的訪問外部類的所有方法和屬性 包括靜態類和private 而外部類訪問內部類需要建立乙個物件,通過物件的引用才能進行訪問...
內部類 成員內部類 區域性內部類 匿名內部類
public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...