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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦冲 黑马帝   /  2012-5-29 17:48  /  1546 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们知道如果方法名相同,只是 返回值不同是无法形成方法重载的。
那么如果两个接口中有这样的情况,而我要实现这两个接口,应该如何设计?
明显下面这样是不行的:
  1. public class Test{
  2. public static void main(String[] args){
  3.   T t = new T();
  4.   t.m();
  5.   }
  6. }

  7. class T implements A,B{
  8. int i = 8;
  9. public void m(){
  10.   System.out.println("i =" + i);
  11. //public double m(){}???
  12.   }
  13.   }
  14.   
  15. interface A{
  16. public double m();
  17. }
  18. interface B{
  19. public void m();
  20. }  
复制代码
如果接口已如此,是否有好的解决方案?

8 个回复

倒序浏览
创建一个父接口,把两个接口中的共性方法提取出来,用子接口继承父接口。
然后用类去实现3个接口里的方法。
回复 使用道具 举报
我告诉你一个方法吧~~可以用但是估计没什么价值
接口首先不做任何改动,那么有2个类,一个类实现一个接口,把其中一个类作为另一个类的内部类
在外部类中自定义一个方法调用内部类实现的那个方法,这样业务功能都封装到一个类中去了
但是这样貌似没什么价值吧
回复 使用道具 举报
丰亚彬 发表于 2012-5-29 18:05
我告诉你一个方法吧~~可以用但是估计没什么价值
接口首先不做任何改动,那么有2个类,一个类实现一个接口, ...

我看那就直接在T这个类中写两个内部类分别实现接口,这样既可以不修改原有接口,有只有一个T类是业务主体。
回复 使用道具 举报
heima_dinghua 发表于 2012-5-29 18:04
不能这样实现接口的,假如类T实现了接口A和B的话,类T中就同时拥有了void型的m()方法和double型的m()方 ...

我知道~~~~
回复 使用道具 举报
秦冲 发表于 2012-5-29 18:09
我看那就直接在T这个类中写两个内部类分别实现接口,这样既可以不修改原有接口,有只有一个T类是业务主体 ...

呃,这样写了就更改了接口方法签名了吧

点评

没有改啊,内部类各自实现。  发表于 2012-5-29 22:58
回复 使用道具 举报
丰亚彬 发表于 2012-5-29 18:19
呃,这样写了就更改了接口方法签名了吧

我是说你对外提供没办法在同一个类中提供这两个功能
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马