【问题标题】:Does object creation of subclass create object of superclass, if yes Is it possible to access it in subclass?子类的对象创建是否创建超类的对象,如果是 是否可以在子类中访问它?
【发布时间】:2016-03-24 18:45:44
【问题描述】:

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

假设ClassASubClassofA 的超类,我们在客户端类ClientClass 中使用SubClassofA object = new SubClassofA(); 实例化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?


    }
}

【问题讨论】:

  • 是的。根据方法的权限。

标签: java inheritance


【解决方案1】:

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

这是很多人感到困惑的事情。如果你创建子类的对象,那并不意味着它创建了超类的对象。

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

This question 会帮助你理解这个概念。

查看凯文的回答:

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

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

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

【讨论】:

  • 您的意思是在我的问题代码示例中,堆中不存在 ClassA 类型的对象?只有一个 SubClassofA 类型的 Object 存在?
  • 感谢您的回答,我将尝试检查 Eclipse JVM Monitor。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
相关资源
最近更新 更多