A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵嘉男 中级黑马   /  2012-4-24 21:00  /  2078 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Super{
  public float getNum(){return 3.0f;}
  }
public class Sub extends Super{
  public void getNum(){}
  }
为什么这样写报错Sub类的返回类型与父类不一致,但换成了public void getNum(double d) {

}就正确了?

5 个回复

倒序浏览
不能在Sub中写和父类一样的方法名,那样在调用getNum方法时不知道是调用的哪个方法。换成public void getNum(double d)后,相当于重载了,就可以了的
回复 使用道具 举报
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
回复 使用道具 举报
因为你这样写Sub从Super继承来了public float getNum()这个方法,而你自己的类中又定义了 public void getNum(){}这个方法,当你创建类的实例,后调用getNum()方法,它会是调用有返回值的getNum方法还是调用无返回值的getNum()方法呢,这是就会报错了。
回复 使用道具 举报
class Super{
  public float getNum(){return 3.0f;}
  }
public class Sub extends Super{
  public void getNum(){}//这边没有重写父类的getNum方法,也就是Sub类有2个getNum方法,那它调用哪个呢,所以它报错
  }
回复 使用道具 举报
你是想重写父类的方法呢,还是想重载呢????????
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马