1. 程式人生 > >Java內部類的自我理解

Java內部類的自我理解

package SE.InnerClass;

public class Outer {
	private static int i = 1;
	private int j = 10;
	private int k = 20;

	public static void outer_f1() {

	}

	public void outer_f2() {

	}

	class Inner {
		// static int inner_i = 100;//內部類中不允許定義靜態變數
		static final int inner = 100;// 但是可以用static final
		int j = 100;
		int inner_i = 1;

		void inner_f1() {
			System.out.println(i);
			// 在內部類中訪問內部類自己的變數直接用變數名
			System.out.println(j);
			// 在內部類中訪問內部類自己的變數也可以用this.變數名
			System.out.println(this.j);
			// 在內部類中訪問外部類中與內部類同名的例項變數用外部類名.this.變數名
			System.out.println(Outer.this.j);
			// 如果內部類中沒有與外部類同名的變數,則可以直接用變數名訪問外部類變數
			System.out.println(k);
			outer_f1();
			outer_f2();
		}

	}

	public void outer_f3() {
		Inner inner = new Inner();
		inner.inner_f1();
	}

	// 外部類的靜態方法訪問成員內部類,與在外部類外部訪問成員內部類一樣
	public static void outer_f4() {
		Outer out = new Outer();
		Inner inner = out.new Inner();
		inner.inner_f1();

	}

	/**
	 * <p>
	 * </p>
	 * 
	 * @author zhangjunshuai
	 * @date 2014-7-1 上午10:17:23
	 * @param args
	 */
	public static void main(String[] args) {

		// outer_f4();//該語句的輸出結果和下面三條語句的輸出結果一樣
		// 如果要直接建立內部類的物件,不能想當然地認為只需加上外圍類Outer的名字,
		// 就可以按照通常的樣子生成內部類的物件,而是必須使用此外圍類的一個物件來
		// 建立其內部類的一個物件:
		// Outer.Inner outin = out.new Inner()
		// 因此,除非你已經有了外圍類的一個物件,否則不可能生成內部類的物件。因為此
		// 內部類的物件會悄悄的連結到建立他的外圍類的物件。如果你用的是靜態的內部類,
		// 那就不需要對其外圍類物件的引用。
		Outer out = new Outer();
		Outer.Inner outin = out.new Inner();
		outin.inner_f1();

	}

}