Почему защищенный метод доступен в несвязанном классе? - PullRequest
3 голосов
/ 06 июля 2011

У меня есть код ниже, написанный с Eclipse ide:

public interface X
{
  final public static int SOME_CONST = 0;
}
public class Handle implements X
{
  protected void methodHandle () { }
 //...
}

public class User implements X
{
  Handle handle = new Handle();
  private void methodUser ()
  {
    Y y = new Y()  // anonymous inner class
    {
      public void methodY ()
      {
        handle.methodHandle (); // <--- why this is NOT giving error ?
      }
    }
  }
}

Несмотря на то, что Handle.methodHandle () равен protected, он по-прежнему вызывается из внутреннего метода анонимного внутреннего class метода?Почему это происходит, я что-то упустил?Единственное соотношение между Handle и User состоит в том, что они implement одинаковы X.

Ответы [ 3 ]

6 голосов
/ 06 июля 2011

Если оба класса находятся в одном пакете, можно вызвать защищенный метод.

См. this для получения более подробной информации.

2 голосов
/ 06 июля 2011

Если вызывающий класс находится в том же пакете, он сможет вызывать защищенные методы.Если это не то, что вы хотели, вы должны сделать свои методы приватными.

1 голос
/ 06 июля 2011

Классы в одной и той же упаковке не являются «не связанными».

...