1. class super {
2. public float getNum() {return 3.0f;}
3. }
4.
5. public class Sub extends Super {
6.
7. }Which method, placed at line 6, will cause a compiler error?
A. public float getNum() {return 4.0f; }
B. public void getNum () { }
C. public void getNum (double d) { }
D. public double getNum (float d) {retrun 4.0f; }
请各位大虾帮忙解释下,晕啊
a选项是正确的重写 所以不选 剩下的应该不是重写,但是我不知道答案怎么选了
2. public float getNum() {return 3.0f;}
3. }
4.
5. public class Sub extends Super {
6.
7. }Which method, placed at line 6, will cause a compiler error?
A. public float getNum() {return 4.0f; }
B. public void getNum () { }
C. public void getNum (double d) { }
D. public double getNum (float d) {retrun 4.0f; }
请各位大虾帮忙解释下,晕啊
a选项是正确的重写 所以不选 剩下的应该不是重写,但是我不知道答案怎么选了
b不对
c是overload
d是overload
不讨论这个问题可能LZ你写错了
D错了。 严格点D是错的,返回的是Foat
属重写,正确。
B. public void getNum () { }
与父类super的getNum有返回值差异,所以不是重写;而参数列表又与父类一样(都没有参数),所以也不是重载,因此属方法名重复,错误!
C. public void getNum (double d) { }
参数列表又与父类不一样,属重载。
D. public double getNum (float d) {retrun 4.0f; }
参数列表又与父类不一样,属重载。
如果两个方法的名称,参数数目与类型都相同,则指两个方法签名相同因此,在一个类中,无法声明两个签名相同的方法,即使它们返回类型不同,也即它们互不重载,因为编译器无法将它们区分(调用时无法加以借鉴返回类型信息)而对于覆盖,子类中相同签名的方法都有被要求覆盖或隐藏(在任何方有static时),比如返回类型不同且非协变时(所谓协变返回类型是指子类方法返回类型是被覆盖的父类方法返回类型的子类),编译错误
b 是错误(编译错误:无法覆盖父类中的方法,正在尝试使用不兼容的返回类型,找到void,需要:int)
c 是重载 (方法名相同,参数列表不同,返回值类型无所谓)
d 同c
java新手,学习中....
D则是因为方法要求的返回类型和实际的返回类型不一致
你可以在一个返回object的方法里面返回string试试成不成功。只要返回的值属于方法返回类型的子类或者是可以自动转化基础类型就可以了。
float可以自动转型为double,所以D不会有问题