路途雖然漫長,但慶幸,我們已在路上
阿新 • • 發佈:2018-12-23
內部類,顧名思義是在一個類裡面再定義一個類,這時候涉及到訪問外部類和內部類的欄位許可權的問題。
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");
}
}
}