class  Super
   {
   public float getNum()
   {  return  3.0f  }
   }   public class Sub extends Super
{
  _________
 }        
 
_______处填写  public  void  getNum()
               { }
      则会编译出错_______处填写  public  void  getNum(double d)
               { }
     则编译不会出错请问为什么?

解决方案 »

  1.   

    1,因为既然继承了,那么Sub就有
     public float getNum()
       {  return  3.0f  }
       }
    而如果再加个
    public  void  getNum()
                   { }
    这个仅仅是函数返回值不同的话重载是不允许的相反,下面这个函数就是正确的重载
     public  void  getNum(double d)
                   { }
    所以可以通过编译所以还是一个重载合法性的问题,楼主可以找点资料看看
      

  2.   

    我觉得理解为覆盖也行,
    不过理解为重载似乎更好吧,第二个成功的方法不就是一个重载函数吗,第一个编译失败不就是因为不符合重载的规定吗
    虽然javac提示的是覆盖失败,这是编译器的一个理解问题
      

  3.   

    这是重载和重写之间的区别.
    第一个楼主是想写个函数重写,但想不做任何操作,所以设成void型,
    但方法重写是子类对父类的原有方法进行改写,设成void型后就不是父类原来的方法了.
    这样当调用getNum()函数时,系统就不能识别该调用哪个了.
    第二个可以理解为重载.
      

  4.   

    怎样理解要看楼主的目的
    1、子类覆盖(override)父类的方法要求
       (1) 方法签名相同,包括方法和形式参数表
       (2) 方法的返回值类型匹配,基本类型要相同,类要相容
       (3) 子类方法抛出的异常列表不能与父类抛出异常冲突
    2、方法重载(overload)要求:方法名相同而参数表必须不同,如个数、类型、顺序等