本菜鸟今天看了关于继承方法的重写方面的内容,发现两本不同的书对于重写的限制规则有不同的说法:a.参数必须要一致,且返回类型必须一样或可兼容,也就是子类中重写的方法返回类型是父类中被重写的方法返回类型的子类型;
b.不能修改返回类型。请问这两种说法有没有冲突?那个说法更准确?为什么(也就是这个限制规则有什么用,比如重写的另一个规则:不能降低方法的存取权限,是因为编译器会在编译的时候认为方法是公有然后虚拟机在执行的时候却发现方法私有而出错)?能否举个例子说明?

解决方案 »

  1.   

    明确的一点,a是正确的,这是java5的新特性,可以返回子类型
    例:
      

  2.   

    public class Base {
    public Object get(){
    return new Object();
    }
    }public class Derive extends Base{
    public String get(){
    return "没问题";
    }
    }
      

  3.   

    对于JDK5.0以后的版本来说,a的说法是正确的
    对于以前的版本来说b的说法是正确的
      

  4.   

    确切的说,约束是:签名必须是一致的,如果要被重写方法(overridden method)的返回类型是引用类型,那
    么overriding method的返回值类型可以是被重写方法的返回值类型的子类,否则,返回值类型必须一致。class Super {

    public int getPrimitive() {
    return 1;
    }

    public Object getRef() {
    return new Object();
    }
    }class Sub extends Super {

    /*public long getPrimitive() {//编译的时候就出错了,不兼容
    return 1;
    }*/

    public String getRef() {
    return "Now return a String type";
    }
    }