//父类
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的,如果重写的返回值不同,那么就不会报错。
请问这是为什么呢????
重写的返回值到底可以不可以不同呢?
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的,如果重写的返回值不同,那么就不会报错。
请问这是为什么呢????
重写的返回值到底可以不可以不同呢?
这是正常的 重写必须方法名 返回值 参数列表完全相同
如果一是private的,二是public的,如果重写的返回值不同,那么就不会报错。
这不叫重写 这你是在子类里写了一个新方法 因为父类的同名方法对子类不可见 所以不会报错
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。和返回值无关
我问的应该是重写,不好意思
Java SE5之后引入协变返回类型,重写时返回类型可以为父类返回类型的子类其它的同意
private方法隐式final,不可重写的,而且派生类中也不可见
你下面些个public的方法返回类型不一样 参数名一样其实不是重写。只子类自己的一个新方法。
这样子当然是没有问题的啦。
一如果是public的话,编译时通不过的。它认为你是要重写。但返回类型不一样所以编译不过。
实际上Java的私有的方法(就是非虚方法),做的是静态绑定。虚方法就是可以被重写的方法,当子类对象被父类所引用的时候会调用自己的那个重写的方法。
你有空去找这方面资料吧。
这个是1.5以后的新搞法,好像是1.5.呵呵
这个叫协变,子类的返回类型必须是父类所能兼容的,比如说父类是object,子类就可以使任何一个类。因为任何一个类都是
object所派生出来的。父类引用指向子类对象是没有问题的,对不对?