假如没有那个限制的话,比如说父类有个方法method是public的,而子类重写这个方法将其变成了protected甚至是private的,如果编译可以通过,
将来进行多态引用Father father = new Son();然后调用method也就是father.method(),这个时候就发生多态,也就是实际调用子类的重写的受保护的或者私有的method,很显然该重写访求有private或protected保护,没有权限,这就实现不了多态,那重写方法就没有意义了,重写方法更重要的是为多态服务
具体我也不知道,只是个人猜想作者: 孙岳 时间: 2012-9-13 20:35
class A{
void test(){}
}
class B extends A{
private void test(){}
}
class C extends B{}
如果这样的话,
A a = new C();
a是没有权限访问B中的test()函数的,但是却有权限访问A中的test()函数,这样就乱了。
B覆盖A中的方法还有什么意义?作者: 程金 时间: 2012-9-13 20:53
里氏代换原则(Lsp)中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石.根据这个面向对象的基本原则来说,假如你子类的访问权限比父类小,那么必然有的地方能使用父类,但是换成了子类的话,访问不了子类的属性或方法,出现问题.这就是违反了"任何基类可以出现的地方,子类一定可以出现"的原则.作者: 杨千里 时间: 2012-9-13 20:55
为什么子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译会失败?