歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java訪問權限

Java訪問權限

日期:2017/3/1 9:52:46   编辑:Linux編程

Java中,有四種訪問權限,分別為private,protected,public和默認。關於他們的區別,現解釋如下:

1 private:

私有的,只能是類自身才能訪問,如一個Java工程中,我們添加了一個包,包名為gibbon.java.test。在該包名下定義了一個類名為Test的類。具體代碼所示。

package gibbon.java.test;

public Class Test{
private int a;
protected int b;
public int c;
int d;
  public static void main(String[] args){
Test test = new Test();
int tmp = test.a; //因為是在自身中調用的私有成員數據,所以這個語句是正確的
}
}

但是,如果我們在gibbon.java.test目錄下再添加一個類名為TestPrivate的類,然後調用Test的私有數據a.就會發現,是個錯誤的語句。

package gibbon.java.test;

public Class TestPrivate{
public static void main(String[] args){
Test test = new Test();
int tmp = test.a; //因為是在另一個類中調用的私有成員數據,所以這個語句是錯誤的
}
}

另外,我們在這裡再添加一個gibbon.java.others的包,同樣,和上面的TestPrivate類一樣,gibbon.java.others下的類也不能調用Test的私有成員

2 protected:

成員是受保護的,只有如該類的派生類(即子類)或者同個包名下的類才能訪問。如下例子,在gibbon.java.test下有個TestProtected的類,其程序如下:

package gibbon.java.test;

public Class TestProtected{
public static void main(String[] args){
Test test = new Test();
int tmp = test.b //b是受保護成員數據,即使是非自身類調用,在同個包內的其他類也可以訪問
}
}

但是,若如1中所說的,在包gibbon.java.others下的某個類訪問,則會出現非法訪問,除非這個類是派生自所訪問的類。如下例子:

但是這個TestChild仍然無法訪問父類的私有成員a。見1

3 默認:

成員屬性是默認的,其和private的區別是比private的權限大點,即默認的能被同個包名下的類所訪問,而private不行。但默認的又比protected屬性的權限小些,其同樣和protected能在同包名下被訪問,但若是非同包的類則不能直接訪問,即使是派生類也不行,如上面的TestChild派生類,若加如下句子,則編譯報錯。

package gibbon.java.others;
import gibbon.java.test;

public Class TestChild extends Test{
public static void main(String[] args){
Test test = new Test();

int tmp1 = test.d; //非相同包內的派生類訪問父類的默認成員是不允許的

int tmp = test.b;
}
}

4 Public:

公有的,所有的類都能訪問。這個是最容易理解的。

Copyright © Linux教程網 All Rights Reserved