大家注意了,我的“ 【150分大讨论】为什么要使用接口? ”主要问的是多重继承,而不是接口?

zhaoqiubo 2004-10-21 08:48:36
http://community.csdn.net/Expert/TopicView1.asp?id=3474082 不要总回答接口怎么怎么好。我问的是为什么要用接口来实现多重继承?什么时候需要多重继承?用接口实现了多重继承会怎么样?不用多重继承又会怎么样??
...全文
326 17 打赏 收藏 举报
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bluesage 2004-11-08
  • 打赏
  • 举报
回复
如楼上所说,我也觉得多继承是为了代码复用。通过interface可以模拟多继承。
launch401 2004-11-08
  • 打赏
  • 举报
回复
我觉得楼主的问题不太清楚,以下几个问题应该搞清楚:

1. 为什么要用多重继承?
多重继承,是为了让一个类拥有多种身份,可以用在不同的场合,达到功能复用的目的。

2. 如何实现多重继承?
在C++中,语言本身支持;
在Java,用interface语法来实现,但interface语法本身并不提供具体实现,如何提供具体实现可以如jeffyan77所说用委派的方式(这样更灵活),也可以直接写实现方法。这就看你的需求了。

3. java中的interface是为了多重继承而设计的吗?
不完全是,个人认为interface语法主要是为封装和多态这些面向对象的基本要求而设计的,所以interface的更大的意义是在设计阶段而不是在实现阶段。面向对象设计的原则之一就是面向接口编程,当然这里所说的接口并不是java中的interface,但java中有interface这个语法一定是为了增强java对面向对象的支持而被加入的。
--------------------------
我问的是为什么要用接口来实现多重继承?
A: java中只有interface这一语法能够完成多重继承。

什么时候需要多重继承?
A: 如上所述。

用接口实现了多重继承会怎么样?
不用多重继承又会怎么样??
A: interface不完全是为了多重继承而设计的。
xtaotao 2004-11-06
  • 打赏
  • 举报
回复
OOD的一条基本原则: 依赖关系应该指向抽象类或接口,而不是指向具体类!

使用接口对于软件重用和扩展会带来很大好处!

而且避免了很多类的多继承带来的问题,如多个父类中同名成员、虚基类等复杂问题。
UglyUgly 2004-11-05
  • 打赏
  • 举报
回复
我问的是为什么要用接口来实现多重继承?
为了避免同样的接口中的方法会有多个实现

什么时候需要多重继承?
呵呵,需要用的时候就用。

用接口实现了多重继承会怎么样?
接口中的方法不会有重复的实现

不用多重继承又会怎么样??
没什么,条条大路通罗马同样的问题可以有多种实现。这也一样。
yub1981_cn 2004-11-05
  • 打赏
  • 举报
回复
并不是用接口来实现多重继承,而是使用接口可以实现多重继承的效果,而且可以避免一些问题。但其意义远不止这些。
bonniewater 2004-11-05
  • 打赏
  • 举报
回复
jeffyan77(jeffyan77)

说的看的不明白
jeffyan77 2004-11-04
  • 打赏
  • 举报
回复
接口无法实现真正意义上的多重继承,但是可以模拟多重继承。

譬如你有一个超类Super,一个接口IF,子类Sub继承了超类Super,实现了接口IF,这样Sub就同时具有了两个类型:Super和IF。但是IF本身并没有任何实现,所以Sub无法从Super那里得到实现。不过这没有关系,这一实现可以通过委派交给另一个实现了IF的对象Other。

class Super{
void m1(){ ...}
}

interface IF{
void m2();
}

class Other implements IF{
void m2(){...}
}

class Sub extends Super implements IF{
private Other other = new Other();

void m2(){ other.m2(); }
}

这样看上去Sub好像实现了Super和IF的双重继承。虽然IF的实现是由另一个IF的实现Other给出的,而Sub确实同时具有Super的实现和IF的实现(由Other给出)和类型。

因为Sub对IF的实现是通过委派实现的,因此这个做法比真正的多重继承要灵活。譬如另有一个Other2

class Other2 implements IF{
void m2(){...}
}

那么Sub可以动态地选择使用哪一个IF的实现:
class Sub extends Super implements IF{
private Other other = new Other();
private Other2 other2 = new Other2();

void m2(){
if(...){
other.m2();
}else{
other2.me2();
}
}
}

等《Java与模式》再版的时候,我会把这个例子改一改放进去,省得很多读者到处找不到经得起推敲的例子。
showerXP 2004-11-04
  • 打赏
  • 举报
回复
《java编程思想》里面说的很清楚。
用具体类实现多重继承要涉及到所有相关类的实现。编译器要做很多的工作,用来区分不同的类,同时又要将这些类合成一块,变一个怪物出来。内存处理也非常复杂,很容易出错。

接口不涉及到具体的实现代码,所以处理起来不用像“如临大敌”一样手忙脚乱的。
allenhe 2004-11-04
  • 打赏
  • 举报
回复
我问的是为什么要用接口来实现多重继承

接口并不是为实现c中的多重继承而设计的。
jFresH_MaN 2004-11-04
  • 打赏
  • 举报
回复
楼上的楼上的说的对,接口就是标准,java里的许多类的参数都是一个接口的对象,只有实现了相应的接口才能实现相应的功能!
而且接口里的方法都已经声明好了,实现借口必须实现方法,这就统一了这个接口的子类的方法!实现多个接口就继承了多个标准!

但接口里的方法毕竟有限,在子类中加入了其他方法也就在统一标准的前提下又扩展了功能!
这就是面向对象的思想,继承对象扩展对象
whohu 2004-11-04
  • 打赏
  • 举报
回复
一种接口代表了一种责任responsbility,就是一种角色。比如一个人他实现了学生接口,那么他就可以去上课,因为他有学生的功能的集合,比如听课,做作业。那么老师就可以发消息给这个学生,指令做作业,听课。而没有这个接口的人是不会做作业,听课的。如过这人实现领导接口的话,可能就有讲话,视察的功能。
launch401 2004-11-01
  • 打赏
  • 举报
回复
接口只是一种约定,就像一个通信协议,用于具体类之间的通信,oo的一个原则就是面向接口编程而不是面向实现编程,在设计阶段,我认为最重要的就是要设计接口,接口一旦确定了,程序的框架也就有了,剩下的就是往里面添东西。多重继承只是让一个对象拥有不同的接口,以符合不同的通信协议。
bonniewater 2004-10-29
  • 打赏
  • 举报
回复
个人认为

当一个类继承了一个父类,而父类缺少它想要的功能,而它又要加,这个时候多继承就有用了

多声明一些接口,最后用一个类实现
zhaoqiubo 2004-10-29
  • 打赏
  • 举报
回复
上面的,接口里面没有实现,如果单纯是为了实现你定义的再多有什么用呢??如果子类没有父类的功能。。这很正常啊。直接在子类里面实现不就得了。。这就是扩展啊!你没有说到点子上。。。
cocolovevienna 2004-10-24
  • 打赏
  • 举报
回复
可能用接口来实现多重继承更符合人的思维方式一些吧.如果名字取得不大好,用抽象类实现的话可能无法一下子看出来吧,而用接口至少能知道一些.
禽兽v5 2004-10-22
  • 打赏
  • 举报
回复
多重继承概念书里有。应用也很多。

为什么用接口实现多重继承,这是语言发展的分歧,各派观点不同。有的语言用类,如C++,有的语言喜欢接口,象java。至于这两种分歧的历史,你要看语言发展的历史资料(其实也就这几十年 -_-||)
zhangyunpeng 2004-10-21
  • 打赏
  • 举报
回复
建议你看看JAVA与模式的依赖倒转原则。写程序,要面对接口编程。这样灵活性比较好。
你这个问题感觉没法回答!
我的联系方式:zppio@126.com


相关推荐
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2004-10-21 08:48
社区公告
暂无公告