所谓子类方法重写父类方法遵循“两同两小一大”的规则
两同:
1)
方法名
2)
形参列表
两小:
1)
返回值类型比父类更小或相等
2)
异常比父类方法更小或相等
一大:
子类权限比父类大或相等
是什么含义?
比如父类的 方法 返回是 long, 子类的返回是 byte 或者 short 或者 int 类型比父类返回类型范围小啊,为什么会报错?
居然跑到java版来混了。
子类重写方法的返回值必须比父类方法的返回值小或为其本身的意思是说 子类重写方法的返回值类型必须为父类方法的返回值类型 或父类方法返回值类型的子类类型
子类重写方法抛出的异常类型 只能是父类方法抛出的类型 或父类方法抛出的异常类型的子类类型
子类重写方法的可见性 必须大于或等于父类方法的 可见性 比如 父类方法是用 protected 修饰的 子类就只能用 public 修饰 而不能用private 修饰两者的返回值类型首先必须是一个类层次,再谈大小。
返回值类型为基本类型时,父类子类的方法,返回值类型一样。
你写段程序自己试试会不会覆盖?
字段都是早绑定的,根本没法覆盖的。
比如这段程序:
package A;
class Base{
public String book = "abc";
}
class Derived extends Base{
public int book = 12;
}
public class A {
protected int i = 10;
public int ii = 20;
public static void main(String[] agrs) {
Base b = new Derived();
System.out.println(b.book);
}
}