2008-11-06 129 views
2

Java中以下變量的可訪問性有什麼區別?Java實例變量可訪問性

public class Joe { 
    public int a; 
    protected int b; 
    private int b; 
    int c; 
} 

我最感興趣的是最後一個做的事情。

+0

DUPE:http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default-protected-and-private – 2008-11-06 09:58:47

回答

9
  • 市民:讀/寫的人
  • 保護:讀/寫子類的 實例,從封閉包內
  • 私人:讀/寫爲類任何實例 和內部或外部(封閉)實例
  • int c: 包私有,可讀/可寫 所有類在同一包中

更多細節

EDIT見JLS:增加了保護,指出訪問是從同一個包內授予的評論,你們是完全正確的。還爲私人添加評論。我現在記得... ;-)

+0

我相信你對錯誤的保護。在Java保護手段包私人。這是C#相當於內部 – JaredPar 2008-11-06 06:48:50

+0

不,他絕對是關於子類的保護和r/w。dhiller甚至提供了一個鏈接到詳細解釋的語言規範。 – boutta 2008-11-06 07:43:50

+0

請仔細閱讀規範,它表示實例的類型必須是類或子類。它不會記錄類型實例的使用位置。 – JaredPar 2008-11-06 07:50:44

0

所有這些都是編譯時保護,它們可以很容易地通過在運行時反射來覆蓋。

1

我儘量避免包級訪問(您提到的最後一次訪問)。

我喜歡讓課程自成一體。如果另一個類需要訪問我的類中的某些東西,它應該是公開的(並且它應該通過方法而不是屬性)。否則,我覺得你已破壞encapsulation,正如Abstraction VS Information Hiding VS Encapsulation中所述。

2

對不起回答更正一個以前的答案,但我沒有足夠的聲譽直接修改...

  • 公共 - 讀/寫的人
  • 保護 - 讀/爲 情況下寫子類和同一個包內的所有類
  • INT C:包私人, 讀/所有的班級內 同一個包寫
  • 私人 - 對於該類別的任何成員以及內部類別(如果有),可讀/可寫

從最寬的訪問權限(公共)到最窄的(私有)知會這種方式更好地命令訪問修飾符當從狹窄到寬闊時,你不會失去任何可能性。

這對「保護」,它經常被誤解,在同一個包中的類也可以訪問類(不只是它的子類)的保護成員尤爲重要。