为什么喜欢构图而不是继承呢?每种方法都有哪些权衡取舍?什么时候应该选择继承而不是作文?
当您在子类中重写方法时降低方法的可见性时,为什么编译器会给出错误消息?
以下程序失败:
abstract class A {
protected void method() {}
}
class B extends A {
private void method() {}
}
public class main{
public static void main(String []args) {}
}
Run Code Online (Sandbox Code Playgroud)
有:
main.java:6: error: method() in B cannot override method() in A
private void method() {}
^
attempting to assign weaker access privileges; was protected
1 error
Run Code Online (Sandbox Code Playgroud)
将派生方法设置为protected/private.
问题:Java不允许您进一步限制子类中的访问权限的原因是什么?我将此与C++形成对比,C++具有完全相反的规则.
inheritance ×2
java ×2
oop ×2
aggregation ×1
composition ×1
overriding ×1
polymorphism ×1
subclassing ×1