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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangxin540 中级黑马   /  2013-8-17 23:32  /  1086 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangxin540 于 2013-8-18 20:20 编辑

java支持多实现,实现接口就必须覆盖其抽象方法。现在如果有两个接口,他们中分别有一个抽象方法,方法名相同,但是返回值类型不同,这样同时实现他们的类在实现他们的时候就会报出返回值类型不匹配的错误,这个怎么理解,求解!
  1. interface A{
  2.         public abstract void method();
  3. }
  4. interface B{
  5.         public abstract int method();
  6. }
  7. public class AB implements A, B {
  8.         @Override
  9.         public void method() {

  10.         }

  11.         public int method() {
  12.                
  13.         }

  14. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
返回值类型不匹配,是因为你的方法没有返回值。

与你一同进步!{:soso_e141:}
回复 使用道具 举报
王松松 发表于 2013-8-17 23:45
返回值类型不匹配,是因为你的方法没有返回值。

与你一同进步! ...

两个同名函数,只有返回值类型不同,这是没有构成重载的,也就是说这是不允许存在同一个类中的。
回复 使用道具 举报
其实,既然你的抽象方法名一样,返回值不同,如果去实现这个接口,相当于在这个接口中定义了相同的两个方法,是错误的。

  1. interface A
  2. {
  3.         public abstract void method();
  4.         public abstract int method();
  5. }
  6. class AB implements A{}
复制代码
与你一同进步!{:soso_e141:}
回复 使用道具 举报
就上面的程序来看,编译时会报出3处错误:
错误一:两个接口的实现类AB中会报出,同一个类中出现同名方法的错误。不要把它理解成方法的重载,重载只跟参数列表有关,与返回值类型无关。之所以这样不行,是因为在调用时不知道调用哪个方法。
错误二:AB不是抽象的,并未覆盖B中的抽象方法。
错误三:AB中的method()无法实现B中的method(),并且给出了无法实现的原因是返回值类型与int不兼容。因为方法的覆盖必须保证覆盖方法和被覆盖方法具有相同的方法名、参数列表和返回值类型。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 赞一个!

查看全部评分

回复 使用道具 举报
其实你在设计类A和类B的时候就应该要注意避免不要设计方法名相同,参数列表相同而返回值类型不同的这种非重载的情况,这就跟在一个类中设计仅返回值不同的两个函数,没有多大的意义。而且在实现不同接口中使用相同的方法名通常会造成代码可读性的混乱,要尽量避免这种情况。
回复 使用道具 举报
目前我认为无法实现,并且AB的子类也没有办法实现A,B任意接口
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马