extends关于父类private字段的思考

extends关于父类private字段的思考

我们都知道子类不能继承父类私有的变量或者方法,但是很多时候却发现能直接调用set/get方法进行设置。究竟子类是包含这个field还是不包含? 是否属于继承?

从官方文档上来看:

A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.

子类不会继承父类的私有成员变量。但,如果父类拥有public或protected方法来访问这些变量,那么子类也可以使用。这里明确说了一点,就是可以访问得到,也明确说明的不能继承。

但是如果不能继承的话,我们知道当我们实例化一个子类的时候,我们是先实例化父类,然后再修改成为子类,那么只有一个对象,如果我们能set的话,那变量究竟在哪?

这个问题在SO上也有说明:

Obviously, an OBJECT of a subclass must contain its superclass's private fields. And it doesn't have access to a private member doesn't mean its not there.

很明显,一个子类的object肯定包含父类的私有成员变量,只是没有访问的权限。

所以我们能够得到结论:

  1. 私有成员变量不能继承
  2. 子类肯定包含私有成员变量,只是不能访问。如果父类提供访问的方法,那么也可以正常访问。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值