① java 中有多少修飾符,它們的訪問許可權又是什麼
樓主問的是訪問控制符,只有訪問控制符才說訪問許可權
JAVA裡面 准確來講是有四個訪問控制符 默認、public、private、protected等四個
pravite 只能在同一個類中訪問
protected,可以在同一個類、同一個包、不同包中的子類訪問
默認:在同一個類、同一個包中訪問
public 同一個類,同一個包、不同包中的子類、不同包中的非子類
不知道樓主問的是不是這,如果不是可以再留言
② Java中目前學習涉及到的四種許可權修飾符都有什麼並說明各自的許可權范圍
(1)public : 公共許可權
修飾對象: 修飾類、方法、屬性
繼承: 被public所修飾的成員能被該類的所有子類繼承下來。
作用域: 可以被任意類訪問
public能用來修飾類,在一個java源文件中只能有一個類被聲明為public,而且一旦有一個類為public,那這個java源文件的文件名就必須要和這個被public所修飾的類的類名相同,否則編譯不能通過。說到這里,穿插多一點知識。一個類作為外部類的時候只能被public或者默認訪問修飾符所修飾,但是一個類如果作為內部類的時候,則可以被四種訪問修飾符所修飾,因為一個類作為內部類的時候,就作為外部類的一個成員屬性了,因此可以有四種訪問修飾符修飾,這是內部類和外部類的一個區別。
public用來修飾類中成員(變數和方法),被public所修飾的成員可以在任何類中都能被訪問到。通過操作該類的對象能隨意訪問public成員。
public在類的繼承上的體現,被public所修飾的成員能被所有的子類繼承下來。
(2)protected:受保護的許可權
修飾對象:修飾內部類,介面,屬性,方法
繼承: 被protected所修飾的成員能被該類的所有子類繼承下來。
作用域: 可以被同包類訪問,如果不是同包,必須是該類的子類才能訪問
(3)default : 同包許可權(默認,預設的)
修飾對象:修飾類,屬性,方法。
繼承:被default所修飾的成員只能被該類所在同一個package中的子類所繼承下來。(也就是說只有在同一個package中的子類才能訪問到父類中default修飾的成員)
作用域: 只能被同包的類訪問
(4) private : 私有許可權
修飾對象 : 內部類,屬性,方法
作用域: 只能在本類中使用
注意:
(1)protected不能修飾類。
(2)priavte可以修飾類,但是該類必須是一個內部類。
在定義類時,推薦訪問控制級別從嚴處理:
(1) 如果不允許外部直接通過 new 創建對象,構造方法必須是 private。
(2)工具類不允許有 public 或 default 構造方法。
(3)類非 static 成員變數並且與子類共享,必須是 protected。
(4)類非static成員變數並且僅在本類使用,必須是private。
(5)類 static 成員變數如果僅在本類使用,必須是 private。
(6)若是 static 成員變數,必須考慮是否為 final。
(7)類成員方法只供類內部調用,必須是 private。
(8)類成員方法只對繼承類公開,那麼限制為 protected。
③ Java 訪問控制修飾符
幫你找了一篇博客,寫的很好:http://xuyan6688.blog.163.com/blog/static/2920588920115178519198/
public :能被所有的類(介面、成員)訪問。
protected:只能被本類、同一個包中的類訪問;如果在其他包中被訪問,則必須是該成員所屬類的子類。
private:成員變數和方法都只能在定義它的類中被訪問,其他類都訪問不到。對成員變數的進行獲取和更改,一般用get(),set() ,public 方法。實現了Java面向對象的封裝思想。
friendly(預設):訪問許可權與protected相似,但修飾類成員時不同包中的子類不能訪問。
static:修飾變數,稱為類變數或靜態變數。靜態變數是和類存在一起的,每個實例共享這個靜態變數,在類載入時初始化。
final:被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取不能更改。修飾類是不能派生出子類,修飾方法時,不能被當前子類的方法覆蓋。
abstract:不能創建abstract 類的實例。一般被繼承,實現抽象方法。類只要有一個abstract方法,類就必須定義為abstract,但abstract類不一定非要保護abstract方法不可。
如果對你有幫助請採納,謝謝!
④ java 的訪問修飾符是什麼
Java中的訪問修飾符
Java面向對象的基本思想之一是封裝細節並且公開介面。Java語言採用訪問控制修飾符來控制類及類的方法和變數的訪問許可權,從而向使用者暴露介面,但隱藏實現細節。訪問控制分為四種級別:
(1)public: 用public修飾的類、類屬變數及方法,包內及包外的任何類(包括子類和普通類)均可以訪問;
(2)protected: 用protected修飾的類、類屬變數及方法,包內的任何類及包外那些繼承了該類的子類才能訪問(此處稍後解釋),protected重點突出繼承;
(3)default: 如果一個類、類屬變數及方法沒有用任何修飾符(即沒有用public、protected及private中任何一種修飾),則其訪問許可權為default(默認訪問許可權)。默
認訪問許可權的類、類屬變數及方法,包內的任何類(包括繼承了此類的子類)都可以訪問它,而對於包外的任何類都不能訪問它(包括包外繼承了此類的子類)。default重點突出包;
(4)private: 用private修飾的類、類屬變數及方法,只有本類可以訪問,而包內包外的任何類均不能訪問它。
網上一些資料及一些書上用表格對java訪問修飾符做了清楚的總結,如下表所示:
重要總結:通過上面的分析,我們可以看到:
1.public、private和protected對我們來說沒有任何異議。
2. 頂層類只能用public訪問修飾符和default(默認)訪問修飾符修飾,其中用默認修飾符修飾的類(及沒有任何修飾符的類,如class B{})不能被其他包中的類繼承,這也說明了default(默認)訪問修飾符突出的是包許可權
3. protected:本人做了一次實驗,發現在不同包的子類中,new一個父類對象,並用該父類對象去訪問父類中的用protected修飾的類屬變數和方法時不能訪問,而new一個子類對象時,子類對象可以訪問(說明protected修飾的類可以被其他包中的類繼承)。也可以在子類重寫父類的方法中使用super關鍵字調用。這豈不是和上面表格中的總結(紅色對勾)沖突了?本人也是百思不得其解。最後在網上找到了一個相對比較認可的解釋,如下:
protected修飾符的修飾的成員變數和方法也稱為受保護的成員變數和方法, 受保護的成員變數和方法可以在本類或同一個包中的其它類(包括子類)中通過類的實例進行訪問,也可以被同一個包中的類或不同包中的類繼承,但是不能在不同包中的其它類(包括子類)中通過類的實例進行訪問。
4. 如果一個類使用public修飾,那該類的類名必須與他所在的源文件名相同。一個.java源文件中有且只有一個public類,頂層類只能用public和默認修飾符(即無修飾符)修飾;
5.final修飾的類不能被繼承,沒有子類。
6.abstract修飾的類不能被實例化,必須被子類繼承。類只要有一個抽象方法就必定是抽象類,但抽象類不一定要有抽象方法。
最終總結,就一句話:protected修飾符所修飾的類(這句話中指父類)屬成員變數和方法,只可以被子類訪問,而不管子類是不是和父類位於同一個包中。default修飾符所修飾的類屬成員變數和方法,只可被同一個包中的其他類訪問,而不管其他類是不是該類的子類。protected屬於子類限制修飾符,而default屬於包限制修飾符。