设计与实现 Pet接口
|
问:等一下!接口并不是真正的多重继承,因为你无法在它里面实现程序代码,不是吗?如果是这样,那还要接口做什么?
答:多态、多态、多态。接口有无比的适用性,若你以接口取代具体的子类或抽象的父类作为参数或返回类型,则你就可以传入任何有实现该接口的东西。这么说吧,使用接口你就可以继承超过一个以上的来源。类可以 extend 过某个父类,并且实现其他的接口。同时其他的类也可以实现同一个接口。因此你就可以为不同的需求组合出不同的继承层次。
事实上,如果使用接口来编写程序,你就是在说:“不管你来自哪里,只要你实现这个接口,别人就会知道你一定会履行这个合约”。
大部分良好的设计也不需要在抽象的层次定义出实现细节,我们所需的只是个共同的合约定义。让细节在具体的子类上实现也是很合理的。
不同继承树的类也可以实现相同的接口
|
当你把一个类当作多态类型运用时,相同的类型必定来自同一个继承树,而且必须是该多态类型的子类。定义为Canine类型的参数可以接受Wolf与Dog,但无法忍受Cat或Hippo。
但当你用接口来作为多态类型时,对象就可以来自任何地方了。唯一的条件就是该对象必须是来自有实现此接口的类。允许不同继承树的类实现共同的接口对JavaAAPI来说是非常重要的。如果你想要将对象的状态保存在文件中,只要去实现Serializable这个接口就行。打算让对象的方法以单独的线程来执行吗?没问题,实现Runnable。有概念了吧。后面的章节会有关于Serializable与Runnable的讨论,现在只要先掌握住这个概念就行。
更棒的是类可以实现多个接口!
通过继承结构,Dog对象IS-A Canine、IS-A Animal、IS-A Object。但Dog IS-A Pet是通过接口实现的机制达成的,并同时也能够实现其他的接口:
public class Dog extends Animal implements |
|
如果新的类无法对其他的类通过IS-A测试时,
就设计不继承其他类的类。
只有在需要某类的特殊化版本时,以覆盖或加新的方法来继承现有的类。
当你需要定义一群子类的模板,又不想让程序员初始化此模板时,设计出抽象的类给它们用。
如果想要定义出类可以扮演的角色,使用接口。
| 回书目 上一节 下一节 |
|
||||
| · CCNA认证考试Pass必备 · 无线网络环境 · 无线路由器故障处理 · 解析35岁技术人的价值.. · 无线重中之重:安全问题 · 无线局域网基本知识 · 家庭无线局域网 · 华为七千人主动辞职规.. |
· 微软出价446亿美元收购.. · 虚拟化的“赤壁之战” · Windows Server 2008专.. · 802.11n:下一代的无线.. · 脉冲无线电uwb专题 · AIX操作系统管理应用 · 云计算时代来临 · 求职必杀技 决战面试官 |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · 无线网状网(MESH) · Windows远程桌面应用 · C#技术开发指南 |
· Apache技术专题 · Windows集群服务应用 · C#技术开发指南 · 文档格式标准开战 OOXM.. · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 解析35岁技术人的价值.. |
|||