Создает ли объект создание подкласса объекта суперкласса, если да, возможно ли получить к нему доступ в подклассе?

Мой вопрос в том, можем ли мы получить доступ и использовать косвенно/неявно созданные объекты суперкласса при создании экземпляра подкласса.

Допустим, что ClassA - суперкласс SubClassofA, и мы создаем экземпляр SubClassofA в клиентском классе ClientClass с помощью SubClassofA object = new SubClassofA();

Поскольку целая иерархия наследования создается при создании объектов подкласса, мне было интересно, возможно ли получить доступ к объекту класса ClassA в классе клиента?

Если это невозможно, какие могут быть причины? Разве это не спасет много памяти кучи, если мы сможем получить доступ к объектам суперкласса, не воссоздавая их?

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

public class ClassA {}

public class SubClassofA extends ClassA {}

public class ClientClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SubClassofA object = new SubClassofA();

        //Above construct means that an instance of super class ClassA exists too 
        // If we can use those super class instances directly, will it result in memeory saving?
        //is it even possible to access implicitly created super class objects tied to subclass?


    }
}

Ответ 1

Поскольку целая иерархия наследования создается при создании объектов подкласса, мне было интересно, можно ли получить доступ к объекту класса ClassA в классе клиента?

Это то, что многие путают. Если вы создаете объект подкласса, то не означает означает, что он создает объект суперкласса.

Его просто вызов конструктора суперкласса, чтобы убедиться, что все обязательные поля инициализированы в суперклассе, , но это не создает объект суперкласса.

Этот вопрос поможет вам понять концепцию.

Проверьте ответ Кевина:

Он не создает два объекта, только один: B.

При наследовании от другого класса вы должны вызвать super() в своем конструкторе. Если вы этого не сделаете, компилятор будет вставлять этот вызов для вас, как вы можете ясно видеть.

Конструкторы суперкласса вызываются, потому что иначе объект будет оставлен в неинициализированном состоянии, возможно, без ведома разработчика этого подкласса.