黑马程序员技术交流社区

标题: java接口 [打印本页]

作者: 秦冲    时间: 2012-5-29 17:48
标题: java接口
我们知道如果方法名相同,只是 返回值不同是无法形成方法重载的。
那么如果两个接口中有这样的情况,而我要实现这两个接口,应该如何设计?
明显下面这样是不行的:
  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. }  
复制代码
如果接口已如此,是否有好的解决方案?
作者: 黑马张健    时间: 2012-5-29 18:04
创建一个父接口,把两个接口中的共性方法提取出来,用子接口继承父接口。
然后用类去实现3个接口里的方法。
作者: 丰亚彬    时间: 2012-5-29 18:05
我告诉你一个方法吧~~可以用但是估计没什么价值
接口首先不做任何改动,那么有2个类,一个类实现一个接口,把其中一个类作为另一个类的内部类
在外部类中自定义一个方法调用内部类实现的那个方法,这样业务功能都封装到一个类中去了
但是这样貌似没什么价值吧
作者: 秦冲    时间: 2012-5-29 18:09
丰亚彬 发表于 2012-5-29 18:05
我告诉你一个方法吧~~可以用但是估计没什么价值
接口首先不做任何改动,那么有2个类,一个类实现一个接口, ...

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

我知道~~~~
作者: 丰亚彬    时间: 2012-5-29 18:19
秦冲 发表于 2012-5-29 18:09
我看那就直接在T这个类中写两个内部类分别实现接口,这样既可以不修改原有接口,有只有一个T类是业务主体 ...

呃,这样写了就更改了接口方法签名了吧
作者: 丰亚彬    时间: 2012-5-29 23:18
丰亚彬 发表于 2012-5-29 18:19
呃,这样写了就更改了接口方法签名了吧

我是说你对外提供没办法在同一个类中提供这两个功能




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