Java вложенные интерфейсы и внутренние классы - PullRequest
5 голосов
/ 08 апреля 2011

Почему вложенный интерфейс Java не может быть нестатичным? И почему внутренний класс не может содержать статические не финальные члены?

Я сталкивался с вопросами во время прохождения Гослинга и пока не смог найти ответ.

Ответы [ 2 ]

8 голосов
/ 08 апреля 2011

Если вложенный класс не является статическим (т. Е. Внутренним классом), это означает, что каждый его экземпляр связан с экземпляром внешнего класса.Поскольку у интерфейса нет собственных экземпляров, кажется, что нецелесообразно привязывать реализующие классы к внешнему объекту, поэтому использование статического по умолчанию кажется разумным.

2 голосов
/ 08 апреля 2011

Я не уверен, почему вы не можете иметь статические не финальные члены во внутреннем классе, но поскольку статические члены не связаны с каким-либо конкретным экземпляром объекта, не имеет значения, находится ли он во внутреннем или внешнем классе.

Например,

class OuterClass {

  private static int staticMember;

  class InnerClass {

    void incStatic() {
      staticMember++;
    }

  }

}

Вы можете получить доступ к статическому члену из внутреннего класса, как если бы он был внутри внутреннего класса.

...