讨论一下 interface 的问题

telenths 2002-07-11 05:55:50
一个类同时 implements 了两个 interface
可这两个 interface 里都有一个相同的函数(包括名称,参数)
在另一个类里生成这两个 interface 的实例
怎样分别定义和调用各 interface 里的函数?

例如:
//-------------------------------
public interface in1 {
public void type();
}
public interface in2 {
public void type();
}
// 两个 interface

//-------------------------------
public class test implements in1,in2{ //同时 implements 了两个 interface
public test() {
}
public void type(){ // 怎样分别定义?
System.out.println("type");
}
}

//------------------------------
public class test2 {
public test2 () {
}
public static void main(String[] args) {
Frame1 frame1 = new Frame1();
frame1.show();
in1 tes1 = new test();
tes1.type(); // println("type")

in2 tes2 = new test();
tes2.type(); // println("type")
}
}
...全文
49 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
telenths 2002-07-13
  • 打赏
  • 举报
回复
唉,算了这个问题在讨论下去也没什么意义了
因为这本来就是一个没有意义的问题
规范都定义好了 照做就行,何必那么麻烦呢
只能说 Java 在这里还有一点缺陷,
但并不影响 Java 的健壮
erikzb 2002-07-13
  • 打赏
  • 举报
回复
多个interface不是C++中的多继承概念
两个interface有相同的函数名有什么关系呢,
java implements interface时只是规定了一个函数名而已,
管他是那个接口的或是自己的

当然,严格来讲这是不好的设计。
rongrongGsr 2002-07-12
  • 打赏
  • 举报
回复
真的没法解决吗?
telenths 2002-07-12
  • 打赏
  • 举报
回复
bonner(大脚指头)
对阿
问题是两个方法 名称,返回值,参数 都一样
你又怎么分别详细的定义呢
难道写两个 名称,返回值,参数 都一样 的方法
知道谁是谁啊
:-/
bonner 2002-07-12
  • 打赏
  • 举报
回复
你的借口里面的方法有详细的定义?
我的为什么没有啊!
都是方法声明阿
如果实现功能,都要自己重写代码的
两个重名怕啥呢?
反正是要自己写,实现出来的类要自己重写方法的啊!
呵呵。。。
telenths 2002-07-12
  • 打赏
  • 举报
回复
wjmmml(笑着悲伤) :
用接口见解实现多重继承
----------- 谢谢 这一点我已经知道了

okyhc(超时) :
自己写个试试不就可以了
----------- 你眼睛不好啊,我已开始不就贴了代码了吗
okyhc 2002-07-12
  • 打赏
  • 举报
回复
这种问题也拿出来讨论?
自己写个试试不就可以了
wjmmml 2002-07-12
  • 打赏
  • 举报
回复
java里面没有多重继承,所以可以用接口见解实现多重继承。
telenths 2002-07-12
  • 打赏
  • 举报
回复
还有人吗
我只是想和大家讨论讨论 何必那么认真嘛 ;-)
zjq1980 2002-07-12
  • 打赏
  • 举报
回复
在.net里面可以继续不同接口的相同方法。
--- ZJQ
telenths 2002-07-12
  • 打赏
  • 举报
回复
我也是那天突然想到了这个问题,
觉得比较有趣就拿出来大家讨论讨论
之后我查了一些书,没有一本谈到这个问题的
看来是有点钻牛角尖了 呵呵
hyla1978 2002-07-12
  • 打赏
  • 举报
回复
这个问题很有趣!如果真是遇到这样的两个interface!那么只有想点另外的办法了.可以用一个抽象类来改写就ok了!
telenths 2002-07-12
  • 打赏
  • 举报
回复
谢谢 GFox(小狐) 的见解
非常实际
GFox 2002-07-12
  • 打赏
  • 举报
回复
同名方法是不是实现类似的功能呢?如果是的话,就让它同名又有何妨?

如果不是的话,接口有同名方法就说明你抽像得不是太好,应该重新设计各个接口^_^
udoo 2002-07-12
  • 打赏
  • 举报
回复
如果发生这种情况,恐怕要重新检查一下设计了,是否有必要一定要同时实现这两个接口,为什么两个接口有同名方法
jeagle 2002-07-12
  • 打赏
  • 举报
回复
你写的接口为什么没有设为abstract,这样的话,你如果引用的接口有重复的话,一定会被发现的
而不像你这两个接口,全部被重载了
anggogo 2002-07-12
  • 打赏
  • 举报
回复
这是软件设计的规则,不要钻牛角尖了
telenths 2002-07-11
  • 打赏
  • 举报
回复
那以后 interface 定义多了还要考虑函数不能重复?
太麻烦了 唉!!!
gab 2002-07-11
  • 打赏
  • 举报
回复
There is no way to implement what you want.

If you implement this type() interface in you "test" class,
all the type() method in your "inl" and "in2" have been implemented.

So, Whatever you cast your "test" to either "in1" or "in2", the same type() method will be called.

In fact, this doesn't conflict with Java Language Specification, since the type() method in "inl" and "in2" has same signature. And in runtime, the real method invocation is a late binding that will invoke your implemented code.

cloudwindbase 2002-07-11
  • 打赏
  • 举报
回复
接口的函数名一定要一样吗,改个名字行不行?

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧