2013-10-07 147 views
0

我創建一個類,有幾個protected成員,是完全提供給其他類:免費訪問受保護的成員

class MyClass { 
    protected String name; 
} 

在我看來,這不應該編譯:

MyClass mc = new MyClass(); 
mc.name = "foo"; 

但它工作正常。當我使會員private,它按預期工作。這怎麼可能?

的幾個注意事項,但不應有任何區別,我認爲:

  • mc裏面有個HashMap
  • 我訪問它內部的Activity

回答

6

protected成員(相同或不同包裝)和所有類別在同一包。如果您將該代碼移動到其他軟件包中,您將獲得預期的行爲。

參見Access Control

+0

那麼,這解釋了一切。謝謝。我想它與C#/ C++不同,後者是我學習這個概念的地方。 –

+0

@BartFriederichs不客氣:) –

2

的甲骨文檔是定義保護爲followes:

protected修飾符指定該構件只能在其自己的封裝件內被訪問的(與包專用),此外,通過的一個子類它的類在另一個包中。

看到這個Link

如果您移動類到另一包則不能存取權限名稱這意味着。