子类的对象创建是否创建了超类的对象,如果是,是否可以在子类中访问它?

时间:2015-12-18 05:40:41

标签: java inheritance

我的问题是,当我们实例化一个子类时,我们是否可以访问和使用间接/隐式创建的超类对象。

让我们说ClassASubClassofA的超级类,我们使用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 个答案:

答案 0 :(得分:6)

  

由于在创建子类对象时整个继承层次结构被实例化,我想知道,是否可以在客户端类中访问类ClassA的对象?

很多人都很困惑。如果您创建子类的对象, 意味着它创建超类的对象。

它只是调用超类的构造函数,只是为了确保在超类 中初始化所有必需的字段,但这不会创建超类的对象

This question将帮助您理解这一概念。

  

检查凯文的回答:

     

它不会创建两个对象,只有一个: B

     

从其他类继承时,必须在构造函数中调用super()。如果不这样做,编译器将为您插入该调用,您可以清楚地看到。

     

调用超类构造函数,因为否则对象将保持未初始化状态,可能是子类开发人员不知道的。