日期:2014-05-20  浏览次数:20790 次

所谓子类方法重写父类方法遵循“两同两小一大”的规则?
所谓子类方法重写父类方法遵循“两同两小一大”的规则

两同:
1)
方法名
2)
形参列表
两小:
1)
返回值类型比父类更小或相等
2)
异常比父类方法更小或相等
一大:
子类权限比父类大或相等

是什么含义?



比如父类的  方法 返回是 long, 子类的返回是 byte 或者 short 或者 int  类型比父类返回类型范围小啊,为什么会报错?

------解决方案--------------------
两者的返回值类型首先必须是一个类层次,再谈大小。
返回值类型为基本类型时,父类子类的方法,返回值类型一样。
------解决方案--------------------
屁哥 ,难怪在水源看不到你 。 

居然跑到java版来混了。

子类重写方法的返回值必须比父类方法的返回值小或为其本身的意思是说   子类重写方法的返回值类型必须为父类方法的返回值类型 或父类方法返回值类型的子类类型

子类重写方法抛出的异常类型 只能是父类方法抛出的类型  或父类方法抛出的异常类型的子类类型

子类重写方法的可见性 必须大于或等于父类方法的 可见性  比如 父类方法是用 protected 修饰的  子类就只能用 public 修饰 而不能用private 修饰
------解决方案--------------------
引用:
那么为什么 子类的 属性 覆盖了父类,但是类型 可以跟 父类的不一样?

比如子类是 public String  book ,父类是 public int book ?


你写段程序自己试试会不会覆盖?
字段都是早绑定的,根本没法覆盖的。

比如这段程序:
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);
    }

}