class Super
{
public float getNum()
{ return 3.0f }
} public class Sub extends Super
{
_________
}
_______处填写 public void getNum()
{ }
则会编译出错_______处填写 public void getNum(double d)
{ }
则编译不会出错请问为什么?
{
public float getNum()
{ return 3.0f }
} public class Sub extends Super
{
_________
}
_______处填写 public void getNum()
{ }
则会编译出错_______处填写 public void getNum(double d)
{ }
则编译不会出错请问为什么?
public float getNum()
{ return 3.0f }
}
而如果再加个
public void getNum()
{ }
这个仅仅是函数返回值不同的话重载是不允许的相反,下面这个函数就是正确的重载
public void getNum(double d)
{ }
所以可以通过编译所以还是一个重载合法性的问题,楼主可以找点资料看看
不过理解为重载似乎更好吧,第二个成功的方法不就是一个重载函数吗,第一个编译失败不就是因为不符合重载的规定吗
虽然javac提示的是覆盖失败,这是编译器的一个理解问题
第一个楼主是想写个函数重写,但想不做任何操作,所以设成void型,
但方法重写是子类对父类的原有方法进行改写,设成void型后就不是父类原来的方法了.
这样当调用getNum()函数时,系统就不能识别该调用哪个了.
第二个可以理解为重载.
1、子类覆盖(override)父类的方法要求
(1) 方法签名相同,包括方法和形式参数表
(2) 方法的返回值类型匹配,基本类型要相同,类要相容
(3) 子类方法抛出的异常列表不能与父类抛出异常冲突
2、方法重载(overload)要求:方法名相同而参数表必须不同,如个数、类型、顺序等