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肯定包含父类的私有成员变量,只是没有访问的权限。
所以我们能够得到结论:
- 私有成员变量不能继承
- 子类肯定包含私有成员变量,只是不能访问。如果父类提供访问的方法,那么也可以正常访问。