java中 抽象类+接口
用法:
在abstract class方式中,类可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,类只能够有静态的不能被修改的数据成员(也就是必须是static final 的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的 abstract class。
存在原因:
进一步理解,关于java引入抽象类、接口的目的,向高手请教得到的答复如下:
1、从类的层次结构上看,抽象类是在层次的顶端,但在实际的设计当中,一般来说抽象类应当是后面才会出现。为什么?实际上抽象类的获取有点像数学中的提取公因式:ax+bx,x就是抽象类,如果你没有前面的式子,你怎么知道x是不是公因式呢?在这点上,也符合人们认识世界的过程,先具体后抽象。因此在设计过程中如果你得到大量的具体概念并从当中找到其共性时,这个共性的集合就是抽象类应当是没错的。
2、interface从表面上看,和抽象类很相似,但用法完全不同。它的基本功能就是把一些毫不相关的类(概念)集合在一起形成一个新的、可集中操作的“新类”。我给学生的一个典型例子就是“司机”。谁可以当司机?谁都可以,只要领取了驾照。所以我不管你是学生,白领、蓝领还是老板,只要有驾照就是司机。
interface DriverLicence {
Licence getLicence();
}
class StudentDriver extends Student implements DriverLicence {
}
class WhtieCollarEmployeeDriver extends WhtieCollarEmployee implements DriverLicence {
}
class BlueCollarEmployeeDriver extends BlueCollarEmployee implements DriverLicence {
}
class BossDriver extends Boss implements Driver {
}
当我定义了“汽车”类后,我就可以指定“司机”了。
class Car {
setDriver(DriverLicence driver);
}
这时候,Car的对象并不关心这个司机到底是干什么的,他们的唯一共同点是领取了驾照(都实现了DriverLicence接口)。这个,应当是接口最强大的地方也是抽象类无法比拟的。
总结:抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。通常我们平时养成良好的习惯就是多用接口,毕竟java是单继承,不像C++,但是在需要使用抽象类的时候一定还是要用的(有点类似goto的用法),呵呵。
参考链接:
http://www.cnblogs.com/xiaoao808/archive/2008/03/11/1100886.html //讲的不错
http://dev.yesky.com/436/7581936.shtml
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。