java的內部類

內部類

內部類:在一個類的內部嵌套其它類的操作叫內部類。

簡單的內部類:

public class Outer {
	private String msg = "hello world";
	class Inner  //定義一個內部類
	{
		public void print()
		{
			System.out.println(msg);
		}
	}
	
	public void func()
	{
		Inner inner = new Inner();
		inner.print();
	}
}

public class MainTest {
	public static void main(String[] args) {
		Outer outer = new Outer();
		outer.func();
	}
}

引入內部類之後我們犧牲了程序的規範性,代碼有些混亂。但是換來的卻是內部類可以方便的操作外部類的私有屬性。

針對上面的代碼,我們可以修改爲:

public class Outer {
	private String msg = "hello world";
	
	public String getMsg()
	{
		return this.msg;
	}
	
	public void func()
	{
		Inner inner = new Inner(this);  
        //this表示當前類的對象,類似C++拷貝構造時return的this
		inner.print();
	}
}

public class Inner {
	Outer out = new Outer();
	public Inner(Outer out)  //引用傳遞this.out = main.out
	{
		this.out = out;
	}
	
	public void print()
	{
		System.out.println(out.getMsg());
	}
}

public class MainTest {

	public static void main(String[] args) {
		Outer outer = new Outer();
		outer.func();
	}

}
  1. 內部類的訪問只有通過外部類纔可以完成。
  2. 如果一個內部類只想被外部類使用,可以使用private關鍵字。
  3. 進行屬性訪問時必須加上this。

static修飾內部類

內部類使用了static修飾,該內部類只允許訪問外部類的static部分。

該內部類實例化的語句是:

外部類.內部類 內部類對象 = new 外部類.內部類();

eg:

public class Outer2 {
	private static String msg = "hello world";
	static class Inner
	{
		public void print()
		{
			System.out.println(msg);
		}
	}
	
	public void func()
	{
		Inner in = new Inner();
		in.print();
	}
}

public class TestMain {
	public static void main(String[] args) {
		Outer2.Inner in = new Outer2.Inner();
		in.print();
		
	}
}

在方法中定義內部類

public class Outer3 {
	private static String msg = "hello world";
	
	public void func(int num)
	{
		class Inner
		{
			public void print()
			{
				System.out.println("num: " + num);
				System.out.println("msg: " + msg);
			}
		}
		
		new Inner().print();
	}
}	

public class TestMain {
	public static void main(String[] args) {
		Outer3 out = new Outer3();
		out.func(33);
	}
}

內部類的特點:

  1. 破壞了程序的結構。
  2. 方便進行私有屬性的訪問。(外部類也可以訪問內部類的私有域)
  3. 如果發現類名稱上出現了"." ,應當立即想到內部類的概念。

暫時不推薦使用!

我想一直陪着你,小馬同學。萬事如意~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章