子类继承私有字段?

问题:

这是一个采访问题。

子类是否继承私有字段?

我回答“否”,因为我们无法使用“正常的OOP方式”访问它们。但面试官认为他们是继承的,因为我们可以间接访问这些字段或使用反射,并且它们仍然存在于对象中。
回来之后,我在javadoc中发现了以下引用

超类中的私人会员
子类不会继承其父类的私有成员。

你是否知道采访者意见的任何论据?

回答:

这里的问题/答案中的大多数混乱都围绕着继承的定义。
显然,由于@DigitalRoss解释一个子类的目的必须包含其超类的私有字段。正如他所说,无法访问私人成员并不意味着它不在那里。
然而。这与一个班级继承的概念不同。就像java世界一样,有一个语义问题,仲裁者是Java Language Specification(目前是第3版)。
正如JLS所说(https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2):

声明为私有的类的成员不会被该类的子类继承。只有被声明为protected或public的类的成员才能被继承于一个包中声明的类,而不是声明该类的类。

这涉及面试官提出的确切问题:“做sub CLASSES继承私人领域”。 (由我强调)
答案是否定的。子类的OBJECTS包含其超类的私有字段。子类本身没有其超类的私有字段的NO NOTION。
是语义本质的语义吗?是。这是一个有用的面试问题吗?可能不会。但是,JLS建立了Java世界的定义,并且这样做(在这种情况下)是明确的。
EDITED(从Bjarne Stroustrup中删除了一个并行引用,由于java和c ++之间的区别,大概只会增加混淆,我会让我的答案放在JLS上:)

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Do subclasses inherit private fields?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 2