【问题标题】:When a class is instantiated in java using the new keyword, does every super class in the hierarchy get Instantiated ? [duplicate]当一个类在 java 中使用 new 关键字实例化时,层次结构中的每个超类都会被实例化吗? [复制]
【发布时间】:2018-05-26 12:59:48
【问题描述】:

例如,考虑三个类 A、B 和 C。B 扩展 A,C 扩展 B。 现在 C 类拥有 B 的所有可访问方法和字段。

当C的实例被创建为-----C c = new C()时,堆区为 分配给“C”中的实例字段(它是否包括“A”的属性 还有'B'?)。当调用超类构造函数时,一个新的对象 必须创建超类。对这个对象的引用存储在哪里?

当一个类对象被实例化时,类层次是如何管理的?

【问题讨论】:

  • 没有单独的个对象。 C 对象也是 B 并且也是 A。只有一个引用,只有一个对象。
  • 其实C有B和A的所有方法和字段;不仅是他可以访问的,尽管 C 的代码不一定可以访问所有这些。正如 Louis 所写,C 是 B 和 A 的(扩展),就像汽车也是作为对象的车辆一样。
  • 谢谢。那么超类的私有字段存储在哪里。我希望它们不能存储在同一个对象中,因为它们不可访问。
  • 同样在隐藏字段的情况下 - 如何将两个相同的字段存储在同一个对象中?

标签: java class constructor


【解决方案1】:

(一个)新实例将为所有三个类的字段分配堆空间。调用超类构造函数不会创建新实例,只会初始化字段。

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多