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选项是正确的重写  所以不选 剩下的应该不是重写,但是我不知道答案怎么选了

解决方案 »

  1.   

    a是override
    b不对
    c是overload
    d是overload
      

  2.   

    问题说的是编译错误  这2个类是继承关系,B和C好像差不多啊,答案却是B有编译错误,C没有编译错误,这个重写不是要完全一致的吗?访问权限,重写方法不能更严格。D怎么也没有错呢
      

  3.   

    首先呢 类名就错了 super是关键字 不能做为类名
    不讨论这个问题可能LZ你写错了
    D错了。  严格点D是错的,返回的是Foat 
     
      

  4.   

    A. public float getNum() {return 4.0f; }
    属重写,正确。
    B. public void getNum () { }
    与父类super的getNum有返回值差异,所以不是重写;而参数列表又与父类一样(都没有参数),所以也不是重载,因此属方法名重复,错误!
    C. public void getNum (double d) { }
    参数列表又与父类不一样,属重载。
    D. public double getNum (float d) {retrun 4.0f; }
    参数列表又与父类不一样,属重载。
      

  5.   

    同一个类的方法才能出现重载吧 。 c,d应该既不属于重载也不属于重写。 b有编译错误是因为返回值类型不一样,但是方法名和参数和父类方法一致,而出现重写的错误。编译通不过。 
      

  6.   

    d 项错了 因为方法的重写返回值不能被重写的方法范围大,double的范围比float大
      

  7.   

    方法签名(指名称 与 参数的数目和类型)
    如果两个方法的名称,参数数目与类型都相同,则指两个方法签名相同因此,在一个类中,无法声明两个签名相同的方法,即使它们返回类型不同,也即它们互不重载,因为编译器无法将它们区分(调用时无法加以借鉴返回类型信息)而对于覆盖,子类中相同签名的方法都有被要求覆盖或隐藏(在任何方有static时),比如返回类型不同且非协变时(所谓协变返回类型是指子类方法返回类型是被覆盖的父类方法返回类型的子类),编译错误
      

  8.   

    a 是重写(方法名和返回值类型完全一样,方法内容可以修改)
    b 是错误(编译错误:无法覆盖父类中的方法,正在尝试使用不兼容的返回类型,找到void,需要:int)
    c 是重载 (方法名相同,参数列表不同,返回值类型无所谓)
    d 同c
      

  9.   

    java虚拟机告诉我,答案是B 
    java新手,学习中....
      

  10.   

    B和D 都错了B是因为覆盖方法的返回类型不同,
    D则是因为方法要求的返回类型和实际的返回类型不一致
      

  11.   

    很多人都觉得实际的返回类型不能和方法的返回类型不一样,
    你可以在一个返回object的方法里面返回string试试成不成功。只要返回的值属于方法返回类型的子类或者是可以自动转化基础类型就可以了。
    float可以自动转型为double,所以D不会有问题
      

  12.   

    B项错误,Sub中的getNum()无法覆盖Super中的getNum();正在尝试使用不兼容的返回类型