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){return 4.0d;}
Answer:B
A属于方法的重写(重写只存在于继承关系中),因为修饰符和参数列表都一样.B出现编译错误,如下:
Sub.java:6: Sub 中的 getNum() 无法覆盖 Super 中的 getNum();正在尝试使用不
兼容的返回类型
找到: void
需要: float
public void getNum(){}
^
1 错误
B既不是重写也不是重载,重写需要一样的返回值类型和参数列表,访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private);
重载:必须具有不同的参数列表;
可以有不同的返回类型,只要参数列表不同就可以了;
可以有不同的访问修饰符;
把其看做是重载,那么在java中是不能以返回值来区分重载方法的,所以b不对. |
|