Java中的存取權限有public,private,protected和預設的包存取權限,如果類中的屬性方法沒有顯示的指明存取權限,則具有包存取權限,也稱它為packeged許可權,很多人也稱它為friendly存取權限,而packaged和friendly這兩個關鍵字在實際中都是不存在的。
為了條理清晰,分三種不同情況來總結。
(1)存取權限修飾符修飾成員變數和方法
public:表明該成員變數和方法是共有的,能在任何情況下被訪問。
protected:必須在同一包中才能被訪問。(說的比較簡單,看個例子就明白了)
eg:class A
{
protected int weight ;
protected int f( int a,int b )
{
// 方法體
}
}
假設B與A在同一個包中,則
class B
{
void g()
{
A a=new A();
A.weight=100;//合法
A.f(3,4); //合法
}
}
特別說明:什麼是在同一個包中?答:用package打包在一起的class ,叫在同一個包中。
private:只能在本類中訪問。
eg: class Test
{
private int money;
Test()
{
money=2000;
}
private int getMoney()
{
return money;
}
public static void main(String args[])
{
Test te=new Test();
te.money=3000; //合法
int m=te.getMoney(); //合法
System.out.println("money="+m);
}
}
實際上,把重要的資料修飾為private,然後寫一個public的函數訪問它,正好體現了OOP的封裝特性,是OOP安全性的體現。
(2)存取權限修飾符修飾類
1,不能用protected和private修飾類。
2,用friendly修飾的類叫友好類,在另外一個類中使用友好類建立對象時,要保證它們在同一包中。
(3)存取權限修飾符與繼承,這裡的存取修飾詞指的是修飾成員變數和方法。可以分為兩種情況:
1,子類與父類在同一包中
此時只有聲明為private的變數與方法不能被繼承(訪問)。
2,子類與父類不在同一包中
此時private與friendly均不能被繼承(訪問), protected與public可以。
所以,存取權限修飾符許可權從高到低排列是public ,protected ,friendly, private。
參考原文:http://www.cnblogs.com/cucmehp/archive/2008/10/28/1321106.html