//父类
public class override { private int test(int a,int b){                      //一
System.out.println("父类的test方法");
return 0;
}
public int  test(int c,int d,int e){                //二
String l = "aa";
System.out.println("父类的test(cde)方法");
return -1;
}//子类
public class son extends override{ public void test(int a,int b) {                     //三

System.out.println("子类的test方法");

} public void test(int a,int b,int c){                //四

}
}
各位,以上一 二 三 四  这几处如果我重写的时候,一是public的 那么二只能是public的,这时,如果重写的返回值不同,那么就会报错。
如果一是private的,二是public的,如果重写的返回值不同,那么就不会报错。
请问这是为什么呢????
重写的返回值到底可以不可以不同呢?

解决方案 »

  1.   

    如果我重写的时候,一是public的 那么二只能是public的,这时,如果重写的返回值不同,那么就会报错。
    这是正常的 重写必须方法名 返回值 参数列表完全相同
     
    如果一是private的,二是public的,如果重写的返回值不同,那么就不会报错。 
    这不叫重写 这你是在子类里写了一个新方法 因为父类的同名方法对子类不可见 所以不会报错
      

  2.   

    方法的重载
    Overloading在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同,返回值也可能相同。
    在程序的编译过程中根据变量类型来找相应的方法。Overloading被认为是编译时的多态。Overloading 只是为方便程序员编程的解决方法,编译之后的方法名实际加上了各参数类型成为唯一的名字。普通方法
    public void aa(int a,double b) throws IOException{}
    private int aa(double a,int b){}
    protected double aa(String a,String b){}
    构造方法也可以实现overloading。
    例:
    public  void  teach(){};
    public  void  teach(int a){};
    public  void  teach(String a){}为三种不同的方法。Overloading方法对于不匹配的参数是从低向高转换的。
    Byte—short—float—int—long—double。和返回值无关
      

  3.   

    我刚才上网查到,有人说,在JDK1.5之后,重写可以改变返回值。请问这个说法对吗??? 
      

  4.   

     xnjnmn 您好像跟我讲的是重载。
    我问的应该是重写,不好意思
      

  5.   

    (一)是public型的(二)可以是private型的,如果父类的方法是public型的那么子类的方法重写后也一定要是父类中的返回类型。而如果父类中的方法是private的,子类是不能继承的,因此在子类中当然可以定义不同返回类型的方法,相当于是新定义的子类中的重写方法。
      

  6.   


    Java SE5之后引入协变返回类型,重写时返回类型可以为父类返回类型的子类其它的同意
    private方法隐式final,不可重写的,而且派生类中也不可见
      

  7.   

    一如果是private的方法。
    你下面些个public的方法返回类型不一样 参数名一样其实不是重写。只子类自己的一个新方法。
    这样子当然是没有问题的啦。
    一如果是public的话,编译时通不过的。它认为你是要重写。但返回类型不一样所以编译不过。
    实际上Java的私有的方法(就是非虚方法),做的是静态绑定。虚方法就是可以被重写的方法,当子类对象被父类所引用的时候会调用自己的那个重写的方法。
    你有空去找这方面资料吧。
      

  8.   


    这个是1.5以后的新搞法,好像是1.5.呵呵
    这个叫协变,子类的返回类型必须是父类所能兼容的,比如说父类是object,子类就可以使任何一个类。因为任何一个类都是
    object所派生出来的。父类引用指向子类对象是没有问题的,对不对?
      

  9.   

    private子类是看不到的,所以在子类中再重新定义test()方法等于是定义一个新的方法。