我知道任何类中的所有变量通常都应该被封装,而另一个变量本身不能访问。
但是在子类的情况下,我想知道为什么子类无法访问从母类继承的变量(例如Mother
类具有变量A = ""
以及创建Child
时来自extends
类的Mother
的类。不允许在A
类中立即将变量Child
更改为另一个值(覆盖)。
是的,还有另一种方法可以使用constructor
和super
关键字来解决此问题。问题是为什么他们不允许我们更简单地做到这一点?例如,只允许我们使用constructor
和super
关键字更轻松地覆盖变量。我认为应该有一些理由来支持这一点。正确?
答案 0 :(得分:1)
它是关于保护所涉及对象的内部实现,并为子类的作者提供一个限制子类需要知道的超类的契约。
应该由类的作者决定其实例变量的范围,以及作者控制该范围的方式是通过为它们分配访问修饰符或通过方法调用传递对它们的引用。
如果语言允许子类更改任何超类的任何变量,那么子类就有太多可能破坏超类,并且无法更改超类实现细节而不会有破坏子类的风险。