Область защищенных членов - PullRequest
2 голосов
/ 08 мая 2011

Я готовлюсь к SCJP, также я узнал, что область действия защищенных членов находится внутри пакета, а также в другом пакете с некоторыми условиями, которые возможны только с наследованием.

Например: у меня есть три класса как Parentclass Childclass Friendclass

package x.parent;

 class Parentclass{
 protected int x=10;
  ...............
  }

 package x.child;

 class Childlass extends Parentclass{
  super.x=20;
  ...............
}

 package x.child;

 import x.parent.Parentclass;

 class Friendclass{
 Parentclass pc = new Parentclass();
 pc.x=30;
  ...............
}

В чем причина того, что в Friendclass член x не примет назначение этого значения, ведет себя как закрытый член, не в случае Childclass.

Ответы [ 2 ]

10 голосов
/ 08 мая 2011

Существует четыре модификатора доступа

private - just this class
no modifier - just this class or this package (NOT subclass)
protected - just this class, this package, or subclass
public - everyone and their cousin

Поскольку он использует модификатор по умолчанию, он имеет доступ, если выполняется одно из следующих условий:

  1. Является частью самого класса(Нет!)
  2. Является частью пакета самого класса (Нет!)

Таким образом, он не соответствует критериям, и поэтому у вас нет доступа.

1 голос
/ 08 мая 2011

Вы даже не можете получить доступ к Parentclass.x в Childclass, потому что x имеет видимость по умолчанию (не защищена).См. http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

edit:

x.child.Friendclass - это не в том же пакете как x.parent.Parentclass.x.child.Friendclass не наследует от x.parent.Parentclass.

, поскольку в итоговых состояниях TotalFrickinRockstarFromMars и документах управления доступом Java также указано, это означает, что Friendclass не разрешен доступ к полю x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...