笔记4---内部类
為什么使用內部類:可實現“多重繼承”
?
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類。還可實現外圍接口。如果想要創建某些公共代碼,使得它們能被某個接口的所有的不同實現所共用,這樣就可以使用接口內部的嵌套類。
轉載于:https://www.cnblogs.com/xiaoxionganna/p/8972378.html
總結
- 上一篇: 小米oj 有多少个公差为2的等差数列
- 下一篇: Asp.net几大内置对象