Почему вложенный интерфейс Java не может быть нестатическим? И почему внутренний класс не может содержать статические не окончательные члены?
Я наткнулся на вопросы, просматривая Гослинга, и пока не смог найти ответ.
Почему вложенный интерфейс Java не может быть нестатическим? И почему внутренний класс не может содержать статические не окончательные члены?
Я наткнулся на вопросы, просматривая Гослинга, и пока не смог найти ответ.
Если вложенный класс не является статическим (т. е. внутренним классом), это означает, что каждый его экземпляр привязан к экземпляру внешнего класса. Поскольку интерфейс не имеет своих собственных экземпляров, кажется бесполезным привязывать реализующие классы к внешнему объекту, поэтому его статика по умолчанию кажется разумной.
Я не уверен, почему вы не можете иметь статические не окончательные члены во внутреннем классе, но поскольку статические члены не привязаны к какому-либо конкретному экземпляру объекта, не имеет значения, находится ли он во внутреннем или внешнем классе.
E.g.
class OuterClass {
private static int staticMember;
class InnerClass {
void incStatic() {
staticMember++;
}
}
}
Вы можете получить доступ к статическому члену из внутреннего класса, как если бы он был внутри внутреннего класса.