Java 筆記 - 成員內部類(萌新筆記)
阿新 • • 發佈:2019-01-03
Java中的成員內部類的使用方法
內部類中最常見的就是成員內部類,也稱為普通內部類。我們來看如下程式碼:
public class Outer {
private int a = 99;//外部類的私有屬性
//內部類Inner
public class Inner {
public void test() {
System.out.println("訪問外部類中的a:" + a);
System.out.println("訪問內部類中的b:" + b);
}
}
//測試成員內部類
public static void main(String[] args) {
Outer o = new Outer();//建立外部類物件,物件名為o
Inner i = o.new Inner();//使用外部類物件建立內部類物件,物件名為i
i.test();//呼叫內部類物件的test方法
執行結果為:
訪問外部類中的a:99
訪問內部類中的b:2
- Inner 類定義在 Outer 類的內部,相當於 Outer 類的一個成員變數的位置,Inner 類可以使用任意訪問控制符,如 public、protected、private等
- Inner類中定義的 test() 方法可以直接訪問 Outer 類中的資料,而不受訪問控制符的影響,如直接訪問 Outer 類中的私有屬性a
- 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 一個內部類的物件,即:內部類 物件名 = 外部類物件名.new 內部類();
- 編譯生命程式後,會發現產生了兩個 .class 檔案:
Outer$Inner.class
Outer.class
其中,第二個是外部類 .class 檔案,第一個是內部類的 .class 檔案,即成員內部類的 .class 檔案總是這樣:外部類名 $ 內部類名.class
另外
- 外部類是不能直接使用內部類的成員和方法的
//外部類HelloWorld
public class HelloWorld {
//內部類Inner,類Inner在類HelloWorld的內部
public class Inner {
//內部類的方法
public void show(){
System.out.println("welcome to imooc!");
}
}
public void print(){
show();//外部類呼叫內部類的成員方法
↑↑外部類不能直接訪問內不類中的成員方法,會報錯的↑↑
}
}
可先建立內部類的物件,然後通過內部類的物件來訪問其成員變數和方法
2. 如果外部類和內部類具有相同的成員變數或方法,內部類預設訪問自己的成員變數或方法,如果要訪問外部類的成員變數,可以使用 this 關鍵字。如:
//外部類Outer
public class Outer {
int b = 1;//外部類中的成員屬性b
//內部類Inner
public class Inner {
int b = 2;//內部類的成員屬性b
public void test(){
System.out.println("訪問外部類中的b:" + Outer.this.b);
System.out.println("訪問內部類中的b:" + b);
}
}
}
執行結果:
訪問外部類中的b:1
訪問內部類中的b:2