黑马程序员技术交流社区

标题: 报错了,怎么回事啊 [打印本页]

作者: 赵嘉男    时间: 2012-4-24 21:00
标题: 报错了,怎么回事啊
class Super{
  public float getNum(){return 3.0f;}
  }
public class Sub extends Super{
  public void getNum(){}
  }
为什么这样写报错Sub类的返回类型与父类不一致,但换成了public void getNum(double d) {

}就正确了?
作者: 褚代江    时间: 2012-4-24 21:10
不能在Sub中写和父类一样的方法名,那样在调用getNum方法时不知道是调用的哪个方法。换成public void getNum(double d)后,相当于重载了,就可以了的
作者: 奥特曼爱小怪兽    时间: 2012-4-24 21:14
class Super{
  public float getNum(){return 3.0f;}
  }
public class Sub extends Super{
  public void getNum(){}
   }

这样写的话,相当于Sub类有两个getNum方法
一个是从父类继承而来的,一个是类本身的。但是由于方法名字一样,需要符合方法重载的规则。
但是从父类继承的getNum方法和类本身的getNum方法的方法名一样但是参数类型和参数数也一样,不符合重载规则。所以报错了。

捕获.1PNG.PNG (1.27 KB, 下载次数: 145)

捕获.1PNG.PNG

作者: 胡生蒙    时间: 2012-4-24 23:43
因为你这样写Sub从Super继承来了public float getNum()这个方法,而你自己的类中又定义了 public void getNum(){}这个方法,当你创建类的实例,后调用getNum()方法,它会是调用有返回值的getNum方法还是调用无返回值的getNum()方法呢,这是就会报错了。
作者: 徐鑫    时间: 2012-4-25 00:59
class Super{
  public float getNum(){return 3.0f;}
  }
public class Sub extends Super{
  public void getNum(){}//这边没有重写父类的getNum方法,也就是Sub类有2个getNum方法,那它调用哪个呢,所以它报错
  }
作者: xiwangliujiao    时间: 2012-4-25 09:38
你是想重写父类的方法呢,还是想重载呢????????




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2