我的问题是,当我们实例化一个子类时,我们是否可以访问和使用间接/隐式创建的超类对象。
让我们说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?
}
}
答案 0 :(得分:6)
由于在创建子类对象时整个继承层次结构被实例化,我想知道,是否可以在客户端类中访问类ClassA的对象?
很多人都很困惑。如果您创建子类的对象, 不 意味着它创建超类的对象。
它只是调用超类的构造函数,只是为了确保在超类 中初始化所有必需的字段,但这不会创建超类的对象
This question将帮助您理解这一概念。
检查凯文的回答:
它不会创建两个对象,只有一个: B 。
从其他类继承时,必须在构造函数中调用super()。如果不这样做,编译器将为您插入该调用,您可以清楚地看到。
调用超类构造函数,因为否则对象将保持未初始化状态,可能是子类开发人员不知道的。