日期:2011-03-22 16:17:00 来源:本站整理
Java的"多重承当"[Java编程]
本文“Java的"多重承当"[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
接口只是比抽象类“更纯”的一种情势.它的用处并不止那些.由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一同——所以没有任何办法可以避免多个接口归并到一同.这一点是至关重要的,因为我们常常都需求表达这样一个意思:“x从属于a,也从属于b,也从属于c”.在C++中,将多个类归并到一同的行动称作“多重担当”,并且操作较为不便,因为每个类都大概有一套自己的实施细节.在Java中,我们可采纳一样的行动,但只有此中一个类拥有具体的实施细节.所以在归并多个接口的时刻,C++的问题不会在Java中重演.以下所示:
在一个衍生类中,我们并不一定要拥有一个抽象或具体(没有抽象办法)的底子类.假如确切想从一个非接口担当,那么只能从一个担当.剩余的全部基本元素都必须是“接口”.我们将全部接口名置于implements关键字的背面,并用逗号脱离它们.可按照需求利用多个接口,并且每个接口城市成为一个独立的范例,可对其举行上溯造型.下面这个例子展示了一个“具体”类同几个接口归并的情形,它最毕生成了一个新类:
从中可以看到,Hero将具体类ActionCharacter同接口CanFight,CanSwim以及CanFly归并起来.按这种情势归并一个具体类与接口的时刻,具体类必须首先呈现,然后才是接口(不然编译器会报错).//: Adventure.java // Multiple interfaces import java.util.*; interface CanFight { void fight(); } interface CanSwim { void swim(); } interface CanFly { void fly(); } class ActionCharacter { public void fight() {} } class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly { public void swim() {} public void fly() {} } public class Adventure { static void t(CanFight x) { x.fight(); } static void u(CanSwim x) { x.swim(); } static void v(CanFly x) { x.fly(); } static void w(ActionCharacter x) { x.fight(); } public static void main(String[] args) { Hero i = new Hero(); t(i); // Treat it as a CanFight u(i); // Treat it as a CanSwim v(i); // Treat it as a CanFly w(i); // Treat it as an ActionCharacter } } ///:~
请注意fight()的签名在CanFight接口与ActionCharacter类中是相同的,并且没有在Hero中为fight()供应一个具体的定义.接口的法则是:我们可以从它担当(稍后就会看到),但这样得到的将是另一个接口.假如想成立新范例的一个对象,它就必须是已供应全部定义的一个类.固然Hero没有为fight()明确地供应一个定义,但定义是伴随ActionCharacter来的,所以这个定义会自动供应,我们可以成立Hero的对象.
在类Adventure中,我们可看到共有四个办法,它们将差别的接口和具体类作为自己的自变量利用.成立一个Hero对象后,它可以传送给这些办法中的任何一个.这意味着它们会顺次上溯造型到每一个接口.由于接口是用Java计划的,所以这样做不会有任何问题,并且程序员没必要对此加以任何分外的关注.
注意上述例子已向我们揭露了接口最关键的作用,也是利用接口最重要的一个缘由:能上溯造型至多个底子类.利用接口的第二个缘由与利用抽象底子类的缘由是一样的:避免客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一个问题:到底应当利用一个接口还是一个抽象类呢?若利用接口,我们可以同时得到抽象类以及接口的好处.所以假定想成立的底子类没有任何办法定义大概成员变量,那么无论若何都乐意利用接口,而不要挑选抽象类.事实上,假如事前知道某种东西会成为底子类,那么第一个挑选就是把它变成一个接口.只有在必须利用办法定义大概成员变量的时刻,才应考虑采取抽象类.
以上是“Java的"多重承当"[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:为什么操纵final办法
- ·下一篇文章:java接口例子
- ·中查找“Java的"多重承当"”更多相关内容
- ·中查找“Java的"多重承当"”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论