天天看點

java作用域public,private,protected及不寫時的差別

在說明這四個關鍵字之前,我想就class之間的關系做一個簡單的定義:對于繼承自己的class,base class可以認為他們都是自己的子女,而對于和自己一個目錄下的classes,認為都是自己的朋友。

1、public:對所有使用者開放,所有使用者都可直接調用

2、private:私有。除了class自己之外,任何人都不可直接使用,私有财産神聖不可侵犯嘛,即便是子女,朋友,都不可使用。

3、protected:對于子女、朋友來說,就是public的,可自由使用,無任何限制;而對于其他的外部class,protected就變成private。(同一個包中的類,若不在同一個包中,必須為其子孫類才可使用)

4、預設:預設可以稱為friendly,但是java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來源于c++。預設的通路權限是包級通路權限。

作用域 目前類 同一package 子孫類 其他package

public √ √ √ √

protected √ √ √ ×

friendly √ √ × ×

private √ × × ×

補充說明:

1.每個編譯單元(類檔案)都僅能有一個public class

2.public class的名稱(包含大小寫)必須和其類檔案同名。

3.一個類檔案(*.java)中可以不存在public class。

如果我們在某個包内撰寫一個class,僅僅是為了配合同一包内的其他類工作,并且我們不想再為了撰寫說明文檔給客戶(不一定是現實意義的客戶,可能是調用這個類的類)看而傷腦筋;或者有可能過一段時間之後會徹底改變原有的做法,并以全新的版本代替舊版本,這種情況下一般會預設。

4、class不可以是private和protected。

轉載自http://blog.163.com/training_cui/blog/static/1730374702010919402866/