(1)對於public修飾符,它具有最大的訪問權限,可以訪問任何一個在CLASSPATH下的類、接口、異常等。它往往用於對外的情況,也就是對象或類對外的一種接口的形式。
(2)對於protected修飾符,它主要的作用就是用來保護子類的。它的含義在於子類可以用它修飾的成員,其他的不可以,它相當於傳遞給子類的一種繼承的東西。
(3)對於default來說,有點的時候也成為friendly(友員),它是針對本包訪問而設計的,任何處於本包下的類、接口、異常等,都可以相互訪問,即使是父類沒有用protected修飾的成員也可以。
(4)對於private來說,它的訪問權限僅限於類的內部,是一種封裝的體現,例如,大多數的成員變量都是修飾符為private的,它們不希望被其他任何外部的類訪問。
下表為Java訪問控制符的含義和使用情況
類內部 | 本包 | 子類 | 外部包 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
注意:Java的訪問控制是停留在編譯層的,也就是它不會在.class文件中留下任何的痕跡,只在編譯的時候進行訪問控制的檢查。其實,通過反射的手段,是可以訪問任何包下任何類中的成員,例如,訪問類的私有成員也是可能的。
區別:
(1)public:可以被所有其他類所訪問。
(2)private:只能被自己訪問和修改。
(3)protected:自身,子類及同一個包中類可以訪問。
(4)default(默認):同一包中的類可以訪問,聲明時沒有加修飾符,認為是friendly。
------------------
【Java】Protect, Private and Public的區別
Modifier Class Package Subclass World
public 1 1 1 1
protected 1 1 1 0
no modifier 1 1 0 0
private 1 0 0 0
不寫時默認為friendly
1、public:public表明該數據成員、成員函數是對所有用戶開放的,所有用戶都可以直接進行調用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有財產神聖不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected對於子女、朋友來說,就是public的,可以自由使用,沒有任何限制,而對於其他的外部class,protected就變成private。
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認為friendly
http://jingyan.baidu.com/article/63f236281f5f650209ab3d5f.html
java中public與private還有protect的區別
- |
- 瀏覽:3954
- |
- 更新:2013-11-03 15:05
java中public與private還有protect的區別
方法/步驟
-
先從其作用范圍說起:priavte只能在其自己的定義類中使用,也不能夠在其子類中使用,而public可以在所有的類中使用。protect能夠在自已的定義類以及其子類中使用。
-
從這張圖我們可以看到。在其的子類當中protect是可以用的,而private的引用是出錯的。所以這里驗證了上面的那句話。
-
接下來,我們再看看public到底行不行。從這里的試驗,我們可以看出,public中也是可以用的。所以說現在范圍最小的就是private了。
-
以下為試驗代碼,你可以試試。
package baidujinyan;
public class Baidujingyan {
public void mytry(){
Baidu mybaiBaidu=new Baidu();
String mynameString=mybaiBaidu.mynameString;
String myageString=mybaiBaidu.myage;
String mymom=mybaiBaidu.mymother;
}
}
package baidujinyan;
public class Baidu {
protected String mynameString="jackiewillen";
private String myageString="21";
public String mymother="Mom";
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}