【JAVA學習路-think in java】第6章:訪問控制總結private protected public【全網最全】

摘要:

  • private:僅僅針對類定義時,可以調用;(類作者保護機制)
  • protected:在外部包中,無法調用*;(包作者保護機制)
  • public:接口。(庫用戶的使用接口)
  • 除了public外,外部包能訪問的唯一途徑:protected,且只能是在外包的子類定義時生成子類的對象,然後調用protected.
  • default,約等於protected,唯一區別在於:default沒有外包訪問的唯一途徑

-----------------------------------------------------------------------------------------------------------------------------------

細節:

1、同一編譯單元內:

a、該類定義中,public、protected,以及private 均可以自由調用;

b、該類生成的對象,僅可以調用public、protected;

c繼承類的定義中,僅可以調用public、protected;

d繼承類生成的對象,僅可以調用public、protected;

2、同一包內:

a不必通過import來導入,可以直接使用。

b、在類定義的同一包內,其它編譯單元可以生成類(包括基類、子類)對象,並調用public、protected數據和方法(包括子類調用基類的數據和方法),但不能調用private。如同1b

3、不同包內:

a、導入方法:

import pakgeName.*;
或者具體到類所在的編譯單元:
import pakgeName.className1;import pakgeName.className2;

b

b1、類必須是public,否則其它單元中將不可見。
b2、每個類必須單獨佔有一個編譯單元,文件名等於類名。
b3、類中允許有main函數,main()可以無參,可以不是static。

c、對於在其他編譯單元中生成的類的對象,僅public變量和方法能被調用;

 

備註:每個編譯單元只能有一個public類(p121),因此無法將多個類定義在同一編譯單元中,卻提供給其他包中的類調用。

 

表格總結:

訪問權限總結
  public protected default private
類的定義 Y Y Y Y
同一編譯單元中類生成的對象 Y Y Y N
子類生成的對象對基類方法/數據的調用 Y 本包Y/外部包N 本包Y/外部包N N
本包 Y Y Y N
外部包 Y N* N N

:在子類定義中,在各函數/方法中生成的該子類的對象,該對象可以(Y)調用基類的protected數據/方法(default不行)

但是對與非子類定義,即根據類生成對象時,protected/default是不可以(N)調用的。

附:其它該主題的博客

https://blog.csdn.net/u013771764/article/details/81226908

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章