当前位置: 首页 > 面试题库 >

Java子类是否继承私有字段?

晏卓君
2023-03-14
问题内容

这是一个面试问题。

子类是否继承私有字段?

我回答“否”,因为我们无法使用“常规OOP方式”访问它们。但是访问者认为它们是继承的,因为我们可以间接或使用反射来访问这些字段,并且它们仍然存在于对象中。

回来后,我在javadoc中找到了以下引号:

超类私人成员

子类不继承其父类的私有成员。

你知道面试官的观点有什么论据吗?


问题答案:

这里的问题/答案中的大多数困惑都围绕着继承的定义。

显然,正如@DigitalRoss解释的那样,子类的对象必须包含其超类的私有字段。正如他所说,无法访问私人成员并不意味着它不存在。

然而。这与类的继承概念不同。在Java世界中,存在语义问题时,仲裁者是Java语言规范(当前为第三版)。

如JLS所述(https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2):

声明为私有的类的成员不会被该类的子类继承。只有声明为protected或public的类的成员才可以在声明该包的包以外的其他包中声明的子类继承。

这解决了面试官提出的确切问题:“做子类继承私有字段”。(我加强调)

答案是否定的。他们没有。子类的对象包含其超类的私有字段。子类本身没有其父类的私有字段的NO NOTION。

它是学究性的语义吗?是。这是一个有用的面试问题吗?可能不会。但是JLS为Java世界建立了定义,并且它确实做到了(在这种情况下)。

编辑(从Bjarne Stroustrup中删除了一个并行引号,由于Java和c ++之间的差异,这可能只会增加混乱。我将答案放在JLS上:)



 类似资料:
  • 问题内容: 我读过一个子类不能继承私有字段或方法。但是,在这个例子中 运行时,输出为。似乎是从继承了private属性。 所以,请解释这里发生了什么。谢谢。 问题答案: 子类具有其超类的字段,但不能直接访问它们。同样,子类“具有”私有方法,但是您不能直接从子类中调用或重写它们。 在有关继承的Java文档中,它说 子类并 没有 继承父类的私有成员。 但是,我认为将其视为 子类继承其父类的私有成员,但

  • 快速提问,我正在学习接口和继承。 这不是实际的代码,只是一个例子。假设我有抽象类“动物”。对马和犬类等组有一些继承。还有一个接口“宠物”。它将用于动物的不同子类。犬类“狗”的子类实现了接口“宠物”。因此“狗”的所有子类也实现了接口“宠物”,而不必在“狗”的每个子类上单独实现“宠物”,对吗?

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 我正在做大学项目<我需要从类中获取所有字段。甚至是私人的和继承的。我尝试获取所有声明的字段,然后转换到超类并重复。我的代码片段: 但是它不起作用。强制转换后仍然是同一个类(不是超类)。 我将感谢任何帮助如何修复强制转换问题,或者如何以不同的方式检索这些字段。 问题不是获取对字段的访问权限,而是获取字段的名称! 我这样管理它:

  • 我试图写一个类(SalaryEmployee)和子类(ComissionEmployee),但我没有得到正确的工资,我不能做SE1.SetSalesMount(20000)。我哪里出了问题? 这是主要的:

  • 问题内容: 有人告诉我,对于Java子类,它可以继承其超类的所有成员。那么这是否意味着甚至私人成员?我知道它可以继承受保护的成员。 谁可以给我解释一下这个。我现在很困惑。 问题答案: 不,私有成员 不会被继承, 因为私有成员的范围 仅限 于定义它的类。仅公共成员和受保护成员被继承。 从, 超类私人成员 子类 不继承 其父类 的私有成员 。但是,如果超类具有用于访问其私有字段的公共或受保护的方法,则