use*_*472 14 java oop inheritance
在Java中,当我覆盖一个方法时,编译器会将任何将可见性范围缩小的尝试标记为错误.例如:我不能将公共方法覆盖为受保护,而我可以将受保护的方法覆盖为公共方法.
我有兴趣了解这条规则背后的设计决策/思考.
Emi*_*röm 17
考虑一个B继承自的类A.A.m()是公开的.现在考虑这段代码:
A obj = new B();
obj.m();
Run Code Online (Sandbox Code Playgroud)
这个电话应该被允许吗?是的,它应该,因为obj是类型的对象A!它也是类型的对象B,但使用该对象的对象不一定是已知的.
每个类型的对象A必须遵守合同(接口)A.B延伸A,因此也必须遵守该合同.
在超越或实施访问级别时,我们应该寻求相同的访问级别或更广泛的访问级别。
private < (default) < protected < public
Run Code Online (Sandbox Code Playgroud)
公共是最广泛的层次。
在接口中,所有成员都是默认公共的。因此,在实施或超越时,我们必须只面向公众。