1. 程式人生 > >走進Java(十三):內部類

走進Java(十三):內部類

  • Java中,類中除了可以定義成員變數與成員方法外,還可以定義類,稱為內部類,外面類稱為外部類
  • 內部類的特點:
    1. 內部類與外部類經過JVM編譯後,生成的是兩個獨立的.class
    2. 內部類是外部類的一個成員,內部是可以訪問外部類的任何成員,但外部類不能直接訪問內部類成員
    3. 內部類可以為靜態的,外部類不能

成員內部類:

一個類作為外部類的成員

//外部類建立一個內部類物件
外部類名.內部類名 引用變數名=new 外部類名().new 內部類名();
package com.xdl.java.pkg07;

//定義外部類
public class Other {
	// 定義類成員變數
	private String name = "Other";
	private int count;

	// 定義內部類
	class Inner {
		// 定義內部類的變數
		private String name = "Inner";

		public void say() {
			// Other.this代表外部類物件
			System.out.print(Other.this.name);
			System.out.println(":" + count);
		}
	}
}
package com.xdl.java.pkg07;

public class TestOther {
	public static void main(String[] args) {
		// 建立內部類物件
		Other.Inner obj = new Other().new Inner();
		// 呼叫內部類方法
		obj.say();
	}
}

靜態內部類

package com.xdl.java.pkg07;

public class Other2 {
	// 定義靜態類成員變數
	private static String name = "Other";
	private static int count;

	// 定義內部類
	static class Inner {
		// 定義內部類的變數
		public static String name = "Inner";

		public static void say() {
			// Other.this代表外部類物件
			System.out.print(Other2.name);
			System.out.println(":" + count);
		}
	}
}
package com.xdl.java.pkg07;

public class TestOther2 {
	public static void main(String[] args) {
		// 直接呼叫內部類的屬性
		String str = Other2.Inner.name;
		System.out.println(str);

		// 建立靜態內部類物件
		Other2.Inner obj = new Other2.Inner();
		obj.say();
	}
}

方法內部類

在類中的方法中,定義類

package com.xdl.java.pkg07;

public class Other3 {
	// 定義類靜態成員
	private static String name = "Other";
	private static int count;

	public void say() {
		// 定義方法內部類
		class Inner {
			// 定義類成員
			public String name = "Inner";

			// 定義內部方法
			public void say() {
				// 內部類成員方法中,訪問外部類私有成員變數
				System.out.print(Other3.name);
				System.out.println(":" + count);
			}
		}
		// 建立區域性內部類
		Inner obj = new Inner();
		obj.say();
	}
}

匿名內部類

匿名內部類,就是沒有名稱的內部類

package com.xdl.java.pkg07;

public class Other4 {
	public void say(){
		System.out.println("Other4.say");
	}
}
package com.xdl.java.pkg07;

public class TestOther4 {
	public static void main(String[] args) {
		// 建立匿名內部類
		Other4 o = new Other4() {
			public void say() {
				System.out.println("匿名內部類");
			}
		};
		o.say();
	}
}