Вложенный внутренний класс автоматически наследуется от суперкласса внешнего класса в Java? - PullRequest
0 голосов
/ 12 октября 2019

Скажем, у меня есть Внешний класс A, и он является вложенным внутренним классом B. A является подклассом C. Тогда является ли B также подклассом C? Поскольку B может получить доступ ко всем закрытым членам A и, следовательно, к тому (публичному и защищенному) своего суперкласса, я думаю, что B становится подклассом C.

Правильно ли мое мышление?

Любая помощь высоко ценится.

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Вот что вы, похоже, описываете:

class C {} 
class A extends C {
    static class B {}
}

Наличие вложенного класса в A не делает B подклассом C. Доступ к членам не является определяющим признаком того, чтобы быть подклассом.

Предположим, вы пытаетесь присвоить объект типа B переменной типа C.

C c1 = new A(); // OK -- A is a subclass of C
C c2 = new A.B(); // Not OK

ЕслиB были подклассом C, последний будет правовым заданием. Но это не так.

0 голосов
/ 12 октября 2019

Я так не думаю. Если вы хотите, чтобы B расширял C, вы можете явно сказать:

class C {}

class A extends C {

    static class B extends C {
        //Todo...
    }
}

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

...