1. 程式人生 > >Java 筆記 - 成員內部類(萌新筆記)

Java 筆記 - 成員內部類(萌新筆記)

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 
  1. Inner 類定義在 Outer 類的內部,相當於 Outer 類的一個成員變數的位置,Inner 類可以使用任意訪問控制符,如 public、protected、private等
  2. Inner類中定義的 test() 方法可以直接訪問 Outer 類中的資料,而不受訪問控制符的影響,如直接訪問 Outer 類中的私有屬性a
  3. 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 一個內部類的物件,即:內部類 物件名 = 外部類物件名.new 內部類();
  4. 編譯生命程式後,會發現產生了兩個 .class 檔案:
    Outer$Inner.class
    Outer.class
    其中,第二個是外部類 .class 檔案,第一個是內部類的 .class 檔案,即成員內部類的 .class 檔案總是這樣:外部類名 $ 內部類名.class

另外

  1. 外部類是不能直接使用內部類的成員和方法的
//外部類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