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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谷龙强 中级黑马   /  2013-7-1 08:47  /  1514 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

interface A{
     public void show();
}
interface B{
     public int show();
}

能不能让一个类同时实现A、B接口,A、B中的抽象方法,方法名、参数类型一致,返回值不一致。
若不能解决这个问题,实际情况中遇见该怎么处理。

评分

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

查看全部评分

3 个回复

倒序浏览
1、能不能让一个类同时实现A、B接口,A、B中的抽象方法,方法名、参数类型一致,返回值不一致。
这个是肯定不可以的。如果同时实现了A、B接口,那么这个类就有两个show方法,名字参数都相同,但是返回值不同的两个方法。
这样的话类调用show方法就根本不知道该调用的是哪一个了。因为方法名相同,参数类型都为空,那么该返回哪种类型呢?根本就不知道。所以是不允许的。

2、若不能解决这个问题,实际情况中遇见该怎么处理。
就实现其中一个就好了呀。

评分

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

查看全部评分

回复 使用道具 举报
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中的抽象方法
复制代码
回复 使用道具 举报
嗯,非常谢谢你这样详细的解答,真心觉得黑马论坛里都是牛人啊,让我茅舍顿开,加油。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马