黑马程序员技术交流社区

标题: 多实现中需要覆写的方法相同 [打印本页]

作者: 谷龙强    时间: 2013-7-1 08:47
标题: 多实现中需要覆写的方法相同
interface A{
     public void show();
}
interface B{
     public int show();
}

能不能让一个类同时实现A、B接口,A、B中的抽象方法,方法名、参数类型一致,返回值不一致。
若不能解决这个问题,实际情况中遇见该怎么处理。
作者: 陈雪琪    时间: 2013-7-1 09:20
1、能不能让一个类同时实现A、B接口,A、B中的抽象方法,方法名、参数类型一致,返回值不一致。
这个是肯定不可以的。如果同时实现了A、B接口,那么这个类就有两个show方法,名字参数都相同,但是返回值不同的两个方法。
这样的话类调用show方法就根本不知道该调用的是哪一个了。因为方法名相同,参数类型都为空,那么该返回哪种类型呢?根本就不知道。所以是不允许的。

2、若不能解决这个问题,实际情况中遇见该怎么处理。
就实现其中一个就好了呀。
作者: 贾永长    时间: 2013-7-1 10:08
1:假如A、B接口中的抽象方法完全相同(包括返回值也相同),继承多接口A、B,实现一个方法就可以了。
2:万一就一个返回值不同的话:就得再定义一个接口C,用来解决这个特殊情况了。
见代码:
  1. interface A      //接口A
  2. {
  3.     public void show();
  4. }
  5. interface B     //接口B
  6. {
  7.     public int show();
  8. }
  9. interface C     //针对A、B中抽象方法返回类型不一致且必须还得覆写的特殊情况:再定义一个接口C:用来获取B接口
  10. {
  11.         public B getB();
  12. }
  13. public class D implements A,C     //类D多继承接口A、C
  14. {
  15.         public void show()     //实现A中的抽象方法
  16.         {
  17.                 System.out.println("A中的抽象方法");
  18.         }
  19.         public B getB()      
  20.         {
  21.                 return new B()
  22.                 {
  23.                         public int show()     //实现B中的抽象方法
  24.                         {
  25.                                 System.out.println("B中的抽象方法");
  26.                                 return 0;
  27.                         }
  28.                 };
  29.         }
  30.         public static void main(String[] args)
  31.         {
  32.                 A a = new D();
  33.                 B b = new D().getB();
  34.                 a.show();
  35.                 System.out.println("............");
  36.                 b.show();
  37.         }
  38. }
复制代码
运行结果:
  1. A中的抽象方法
  2. ............
  3. B中的抽象方法
复制代码

作者: 谷龙强    时间: 2013-7-1 23:55
嗯,非常谢谢你这样详细的解答,真心觉得黑马论坛里都是牛人啊,让我茅舍顿开,加油。。。




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