日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【Java入门提高篇】Day6 Java内部类——成员内部类

發布時間:2023/11/27 生活经验 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java入门提高篇】Day6 Java内部类——成员内部类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  內部類是什么,簡單來說,就是定義在類內部的類(一本正經的說著廢話)。

  一個正經的內部類是長這樣的:

public class Outer {class Inner{}
}

  這是為了演示而寫的類,沒有什么luan用,可以看到Inner類置于Outer類的內部。

  那為什么要大費周章的在類內部定義一個類呢?不能在類外部定義類嗎?內部類跟外部類有什么關系?

  確實,很多時候,在外部單獨定義一個類確實更加方便,也更加通用,但內部類的存在自然有其存在的道理,內部類作為寄生在外部類的類,可以自由訪問外部類的所有的屬性和方法,有沒有聯想其我們之前說的繼承,子類可以繼承父類的屬性和方法,但是內部類有著更高的訪問權限,不僅是public屬性,protected屬性,就連private屬性也可以輕松訪問,這樣就不會讓修飾符限制你的想象了(手動滑稽)。

  內部類也分很多種:成員內部類、靜態內部類、局部內部類、匿名內部類。今天先來說說第一種:成員內部類。

  成員內部類是最簡單粗暴的內部類,上面那個栗子中的Inner類就是成員內部類,相比普通的類,成員內部類是不能有static修飾的成員或者方法的,因為成員內部類是寄生在外部類中的,所以必須先有外部類實例才能有成員內部類。在外部創建內部類對象時,姿勢也不太一樣,看起來像是這個樣子的:

public class Test {public static void main(String[] args) {Outer.Inner inner = new Outer().new Inner();}
}

  在內部類中可以訪問外部類的方法和屬性,外部類也可以訪問內部類的方法和屬性,舉個栗子:

public class Outer {private int num;private Inner inner;Outer(){num = 1;inner = new Inner();}public void print(){System.out.println("Outer.print()");System.out.println(inner.num);System.out.println(num);}class Inner{private int num;Inner(){num = 2;}public void print(){System.out.println("Inner.print()");System.out.println(this.num);System.out.println(Outer.this.num);}}
}
public class Test {public static void main(String[] args) {Outer outer = new Outer();Outer.Inner inner = outer.new Inner();outer.print();inner.print();}
}

  輸出如下:

Outer.print()
2
1
Inner.print()
2
1

  外部類訪問內部類的姿勢是先生成內部類實例,然后就能訪問所有方法和屬性,內部類訪問外部類方法和屬性則直接使用Outer.屬性/方法名 即可。

  在這個栗子中,我們可以看到內部了Inner可以對外圍類Outer的屬性進行無限制的訪問,盡管它是private修飾的。因為當我們在創建某個外圍類的內部類對象時,會往內部類傳入一個外部類的引用,只要我們在訪問外部類的成員時,就會用這個引用來選擇外圍類的成員。引用內部類的時候,需要使用Outer.Inner這樣的形式來聲明,而不能直接使用Inner來聲明(除了在Outer類中),當需要使用到內部類的時候,還是推薦使用getInnerInstance的方式來獲取,特別是當內部類只有無參構造器的時候:

public class Outer {private int num;private Inner inner;Outer(){num = 1;inner = new Inner();}public Inner getInnerInstance() {return new Inner();}public void print(){System.out.println("Outer.print()");System.out.println(inner.num);System.out.println(num);}public class Inner{private int num;Inner(){num = 2;}public void print(){System.out.println("Inner.print()");System.out.println(this.num);System.out.println(Outer.this.num);}}
}
public class Test {public static void main(String[] args) {Outer outer = new Outer();Outer.Inner inner = outer.getInnerInstance();outer.print();inner.print();}
}

  這樣的話,就能更好的封裝了。

  當然,內部類跟外部類還有一個很重要區別:內部類可以用private修飾,而外部類是不能使用private修飾的。如果內部類僅僅在類內部使用時,使用private修飾后,就可以更好的隱藏內部信息。

  至此,內部類的第一部分講解完畢,歡迎大家繼續關注。

 

轉載于:https://www.cnblogs.com/mfrank/p/8046605.html

總結

以上是生活随笔為你收集整理的【Java入门提高篇】Day6 Java内部类——成员内部类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。