2013-10-07 3 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:

Защищенная модификатор указывает, что элемент может быть доступен только в пределах своего собственного пакета (как с пакетом-частного) и, кроме того, подклассом его класс в другой упаковке.

Смотреть это Link

Это означает, что если вы переместите класс в другой пакет, который вы не можете Acces имени.

Смежные вопросы