社区
Java
帖子详情
大家注意了,我的“ 【150分大讨论】为什么要使用接口? ”主要问的是多重继承,而不是接口?
zhaoqiubo
2004-10-21 08:48:36
http://community.csdn.net/Expert/TopicView1.asp?id=3474082 不要总回答接口怎么怎么好。我问的是为什么要用接口来实现多重继承?什么时候需要多重继承?用接口实现了多重继承会怎么样?不用多重继承又会怎么样??
...全文
326
17
打赏
收藏
大家注意了,我的“ 【150分大讨论】为什么要使用接口? ”主要问的是多重继承,而不是接口?
http://community.csdn.net/Expert/TopicView1.asp?id=3474082 不要总回答接口怎么怎么好。我问的是为什么要用接口来实现多重继承?什么时候需要多重继承?用接口实现了多重继承会怎么样?不用多重继承又会怎么样??
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
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
相关推荐
接口
2:
接口
与多重
继承
(csdn的
讨论
)
主 题:【150分大
讨论
】为什么要
使用
接口
?作 者:zhaoqiubo (小熊杰利米) 信 誉 值:100所属论坛:Java 设计模式
问
题点数:150回复次数:45发表时间:2004-10-20 14:47:59我对
php中多重
继承
,PHP面向对象之多重
继承
与
接口
用法
介绍
接口
之前,我们要知道,为什么要
使用
接口
,这里向大家介绍一下。那为什么要
使用
接口
呢?计算机语言中,只有少数的面向对象支持多重
继承
,我们所学习的PHP语言和大多数语言一样,并不支持多重
继承
。说白了就是一个父类可以有多个子类,但是子类只能有一个父类。什么又是多重
继承
呢?多重
继承
就是一个子类,
继承
了两个或多个父类,就是多重
继承
,在PHP中是不被允许的。如果要在PHP中实现多重
继承
功能,那么,我们就要用...
Java学习—
接口
java中的
接口
是类的蓝图。 它有静态常量和抽象方法。java中的
接口
是一种实现抽象的机制。
接口
中只有抽象方法而不是方法体。
接口
用于在Java中实现抽象和多重
继承
。 Java
接口
也表示IS-A关系。它不能像抽象类一样被实例化。 为什么要
使用
Java
接口
? 实现抽象 支持多重
继承
的功能 实现松耦合 Java 8
接口
的改进 由于Java 8,
接口
可以有默认和静态方法,稍后
讨论
。...
php实现多重
继承
,关于实现多重
继承
的10篇文章推荐
介绍
接口
之前,我们要知道,为什么要
使用
接口
,这里向大家介绍一下。那为什么要
使用
接口
呢?计算机语言中,只有少数的面向对象支持多重
继承
,我们所学习的PHP语言和大多数语言一样,并不支持多重
继承
。说白了就是一个父类可以有多个子类,但是子类只能有一个父类。什么又是多重
继承
呢?多重
继承
就是一个子类,
继承
了两个或多个父类,就是多重
继承
,在PHP中是不被允许的。如果要在PHP中实现多重
继承
功能,那么,我们就要用...
曲线救国
使用
内部类实现"多重
继承
"
为什么需要内部类: 每个内部类都能独立的
继承
自一个(
接口
的)实现,所以无论外围类是否已经
继承
了某个(
接口
的)实现,对于内部类都没有影响. 如果
使用
的是抽象的类或者具体的类,而不是
接口
,那就只能
使用
内部类才能实现多重
继承
. https://blog.csdn.net/litaosdau/article/details/38758587 如果不需要解决"多重
继承
"的
问
题,那么可以
使用
别的...
发帖
Java
Java
Java相关技术讨论
复制链接
扫一扫
4.9w+
社区成员
8.5w+
社区内容
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2004-10-21 08:48
社区公告
暂无公告