1. 程式人生 > >路途雖然漫長,但慶幸,我們已在路上

路途雖然漫長,但慶幸,我們已在路上


內部類,顧名思義是在一個類裡面再定義一個類,這時候涉及到訪問外部類和內部類的欄位許可權的問題。
1:首先是內部類的類訪問許可權,有public,protected和private。內部類的類訪問許可權只是針對外界而言的。因為無論內部類的類訪問許可權是什麼,即使是private類,從大的層面上來講,對於外部類而言,內部類都是它的一個成員,外部類都可以訪問到內部類,但是不一定能訪問到內部類裡面的成員。
區別在於,當內部類的類訪問許可權為public時,外界對內部類可以以outerClass.innerClass方式,如outerClass.innerClass inn = new outerClass.innerClass() 來例項化內部類;當內部類為private時,外界無法直接訪問到內部類,只能通過一個公開的外部類方法來訪問到內部類。


2:內部類的成員屬性的訪問許可權有public,protected和private,注意此時對於內部類的成員來說,外部類已經是屬於外面了,更不用說外界了,所以外部類的成員只能訪問public,protected的內部類成員,不能訪問被private修飾的內部類成員;反過來,對於內部類來說,外部類的一切成員都可以直接訪問。


3:成員屬性分為靜態和非靜態,即靜態欄位,靜態方法和非靜態欄位,非靜態方法。和普通類機制一樣,要訪問內部類或外部類的靜態成員時,不必例項化類,因為靜態成員是屬於類的,如

class outerClass{
	private static string name="Joey";
	private static Print(){
		innerClass.printName();//要帶上內部類名innerClass
		}
	private class innerClass{
		public static void PrintName(){
			Console.write(name);//不用帶上外部類名,因為內部類是外部類的成員	
		}
	}
}

但是,對於非靜態成員而言,必須經過例項化類後才能訪問,如

class outerClass{
	private string name="Joey";
	private Print(){
		innerClass inner = new innerClass();
		inner.Print();//通過例項化類來訪問非靜態方法
		}
	private class innerClass{
		public void Print(){
			Concole.write("hello world");
		}
	}

}

參考文獻