接口是怎样现实多继承的? 说上说java不允许多继承,但可以同过接口实现多继承但我看到的例子都是些讲接口的使用方法的哪位朋友帮忙找个接口实现多继承的例子看看最好能帮我讲讲原理,谢谢了分不多 不好意思 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 然后要说的就是C++支持多继承, Java不支持多继承.此外要强烈抗议的就是大量的教科书在"Java不支持多继承, 但是支持多接口...", 这类的言词给许多Java的学习者造成了很大的误解, 多接口和多继承只是在语法形式上相似, 但是不具有更多的可比性.Java的接口概念, C++用纯抽象类来表示.class IEvent{public: virtual void function() = 0;};这个和Java的interface IEvent{ void function();}是一致的. 但是实现多接口和多继承有着很大的差别, 特别是对于设计来说.接口表示一种约束关系, 而公有继承表示is-a的关系, 或者保护继承表示implements-with的关系, 而接口表达的语义叫做can-do.那么, 真正来完成多继承这个任务的, 往往是聚合, 当然了, 这个时候接口也可以帮忙, 不去强调约束的关系, 但是主要的功能继承源自于聚合, 而不是实现接口.我之前写过一篇叫做"implements-with"的文章, 更多的从设计的角度讲述了多继承的意义. 接口:人、男人、小孩、要建立个小男还的类AA就要实现上面三个接口就可以在C++等中就要多继承了! 算了吧, 我再免费布道... ...先说OO, OO是人类认识世界, 应用于编程总结出来的方法.三楼的设计不能说问题大,还是小,只在于是不是在系统中适用.如果能跑,而且将来的扩展没有问题,那就是好的,不一定要和现实世界表示很大的相似度.(当然了, 我觉得那个设计糟透了...)你们一定要记住 接口表约束的意思.它的意思是并非给某种类型以某种能力, 或者某种属性, 而是约束某种类型有了某种能力或者属性.考虑这个例子,class Bird implements IFly{}那么难道一定是实现了这个接口才能飞嘛? 显然不是...function Bird(){ this["fly"] = function (){ /*fly code*/};}var bird = new Bird();我靠, 我不去实现什么接口, 我也飞了...体会约束的含义.下面的Java或者C# code来进一步揭示约束的含义.void LetBirdsFly(IFly f){ f.fly();}但是你这段代码传入不了其他的类型的了, 它把对象约束为IFly的实现类.说到这里吧, 接口不是为了继承而存在的. 特别是从面向接口编程的角度讲, 那就更谈不上继承父类的功能了.当然了, 你可以很牵强地去认为, Bird类不是从IFly接口继承到了飞的能力嘛? 呵呵, 那我的js的代码就白写了. Java I/O 的問題 为什么向MYSQL中插入时间时要用这条语名 关于java 网络传输封包的问题 老大们请看看这个提示,我怎么解决呀? 高分求大侠相救 给个例子讲讲好么,谢谢:) 一个急待解决的问题,各位帮帮忙 WHO CAN TELL ME,WHY? 有请写过jni的朋友 关于静态属性的一个问题 No enclosing instance of type ... xmlStreamReader的问题
此外要强烈抗议的就是大量的教科书在"Java不支持多继承, 但是支持多接口...", 这类的言词给许多Java的学习者造成了很大的误解, 多接口和多继承只是在语法形式上相似, 但是不具有更多的可比性.
Java的接口概念, C++用纯抽象类来表示.
class IEvent
{
public:
virtual void function() = 0;
};
这个和Java的
interface IEvent
{
void function();
}
是一致的.
但是实现多接口和多继承有着很大的差别, 特别是对于设计来说.
接口表示一种约束关系, 而公有继承表示is-a的关系, 或者保护继承表示implements-with的关系, 而接口表达的语义叫做can-do.
那么, 真正来完成多继承这个任务的, 往往是聚合, 当然了, 这个时候接口也可以帮忙, 不去强调约束的关系, 但是主要的功能继承源自于聚合, 而不是实现接口.
我之前写过一篇叫做"implements-with"的文章, 更多的从设计的角度讲述了多继承的意义.
三楼的设计不能说问题大,还是小,只在于是不是在系统中适用.如果能跑,而且将来的扩展没有问题,那就是好的,不一定要和现实世界表示很大的相似度.
(当然了, 我觉得那个设计糟透了...)你们一定要记住 接口表约束的意思.
它的意思是并非给某种类型以某种能力, 或者某种属性, 而是约束某种类型有了某种能力或者属性.考虑这个例子,class Bird implements IFly
{
}那么难道一定是实现了这个接口才能飞嘛? 显然不是...function Bird()
{
this["fly"] = function (){ /*fly code*/};
}
var bird = new Bird();我靠, 我不去实现什么接口, 我也飞了...体会约束的含义.下面的Java或者C# code来进一步揭示约束的含义.
void LetBirdsFly(IFly f)
{
f.fly();
}但是你这段代码传入不了其他的类型的了, 它把对象约束为IFly的实现类.说到这里吧, 接口不是为了继承而存在的. 特别是从面向接口编程的角度讲, 那就更谈不上继承父类的功能了.
当然了, 你可以很牵强地去认为, Bird类不是从IFly接口继承到了飞的能力嘛? 呵呵, 那我的js的代码就白写了.