黑马程序员技术交流社区

标题: 关于多实现的理解 [打印本页]

作者: yangxin540    时间: 2013-8-17 23:32
标题: 关于多实现的理解
本帖最后由 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. }
复制代码

作者: 王松松    时间: 2013-8-17 23:45
返回值类型不匹配,是因为你的方法没有返回值。

与你一同进步!{:soso_e141:}
作者: yangxin540    时间: 2013-8-17 23:50
王松松 发表于 2013-8-17 23:45
返回值类型不匹配,是因为你的方法没有返回值。

与你一同进步! ...

两个同名函数,只有返回值类型不同,这是没有构成重载的,也就是说这是不允许存在同一个类中的。
作者: 王松松    时间: 2013-8-18 00:29
其实,既然你的抽象方法名一样,返回值不同,如果去实现这个接口,相当于在这个接口中定义了相同的两个方法,是错误的。

  1. interface A
  2. {
  3.         public abstract void method();
  4.         public abstract int method();
  5. }
  6. class AB implements A{}
复制代码
与你一同进步!{:soso_e141:}
作者: 焦允    时间: 2013-8-18 00:35
就上面的程序来看,编译时会报出3处错误:
错误一:两个接口的实现类AB中会报出,同一个类中出现同名方法的错误。不要把它理解成方法的重载,重载只跟参数列表有关,与返回值类型无关。之所以这样不行,是因为在调用时不知道调用哪个方法。
错误二:AB不是抽象的,并未覆盖B中的抽象方法。
错误三:AB中的method()无法实现B中的method(),并且给出了无法实现的原因是返回值类型与int不兼容。因为方法的覆盖必须保证覆盖方法和被覆盖方法具有相同的方法名、参数列表和返回值类型。
作者: 静以修身    时间: 2013-8-18 15:01
其实你在设计类A和类B的时候就应该要注意避免不要设计方法名相同,参数列表相同而返回值类型不同的这种非重载的情况,这就跟在一个类中设计仅返回值不同的两个函数,没有多大的意义。而且在实现不同接口中使用相同的方法名通常会造成代码可读性的混乱,要尽量避免这种情况。

作者: 许云龙    时间: 2013-8-18 19:23
目前我认为无法实现,并且AB的子类也没有办法实现A,B任意接口




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