【问题标题】:Are private members of the superclass also instantiated, when a subclass is instantiated? [duplicate]当子类被实例化时,超类的私有成员是否也被实例化? [复制]
【发布时间】:2016-08-03 00:33:38
【问题描述】:

在java中,在子类中,super()或超类中定义的非私有方法如何访问超类的私有成员,

子类中不继承私有成员,因此当我们实例化子类时,私有成员没有实例化,即它们不存在,如何访问不存在的东西?

【问题讨论】:

  • 是的,它们当然是实例化的。它们可能是超类正常运行所必需的。
  • 你有一个根本的误解。 Private 是一个访问修饰符。私有成员继承。
  • 您可以尝试从两个类中打印变量,然后看看哪些有效,哪些无效,哪些为空,哪些无效。不用在这里问了。
  • 是的,但它们只在超类中可见!
  • @PaulBoddington:鉴于 cmets 中显示的混乱程度,我不确定我是否相信这样的搜索结果会准确:(

标签: java inheritance


【解决方案1】:

私有字段不会被继承,但它们确实存在。这实际上取决于您在这里所说的“继承”是什么意思-我相信,JLS(例如在8.2中)是指可以通过成员解析来查找与子类相关的成员。私有成员无法在这个意义上被解析,但字段仍然存在。

子类实例的状态由整个继承链中声明的所有字段组成。

【讨论】:

  • 感谢乔恩的回复,“继承”是什么意思?
  • @Abhishek:“假设”在什么意义上?正如我所说,看起来 JLS 使用它来表示可以通过名称解析该子类的成员。 (例如,您可以解决无法访问的成员,但稍后再确定。)我建议您点击重复问题的链接以获取更多详细信息。
猜你喜欢
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多