当子类被实例化时,超类的私有成员是不是也被实例化? [复制]
Posted
技术标签:
【中文标题】当子类被实例化时,超类的私有成员是不是也被实例化? [复制]【英文标题】: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 中显示的混乱程度,我不确定我是否相信这样的搜索结果会准确:( 【参考方案1】:私有字段不会被继承,但它们确实存在。这实际上取决于您在这里所说的“继承”是什么意思-我相信,JLS(例如在8.2中)是指可以通过成员解析来查找与子类相关的成员。私有成员无法在这个意义上被解析,但字段仍然存在。
子类实例的状态由整个继承链中声明的所有字段组成。
【讨论】:
感谢乔恩的回复,“继承”是什么意思? @Abhishek:“假设”在什么意义上?正如我所说,看起来 JLS 使用它来表示可以通过名称解析该子类的成员。 (例如,您可以解决无法访问的成员,但稍后再确定。)我建议您点击重复问题的链接以获取更多详细信息。以上是关于当子类被实例化时,超类的私有成员是不是也被实例化? [复制]的主要内容,如果未能解决你的问题,请参考以下文章