抽象类和接口的区别:详细解析Java中抽象类和接口的区别来源: 发布时间:星期四, 2009年3月19日 浏览:0次 评论:0
在Java语言中 abstract 和erface 是支持抽象类定义两种机制正是由于这两种机制存在才赋予了Java强大 面向对象能力abstract 和erface的间在对于抽象类定义支持方面具有很大相似性甚至可以相互替换因此很多开发者在进 行抽象类定义时对于abstract 和erface选择显得比较随意其实两者的间还是有很大区别对于它们选择甚至反映出对 于问题领域本质理解、对于设计意图理解是否正确、合理本文将对它们的间区别进行番剖析试图给开发者提供个在 2者的间进行选择依据 理解抽象类 abstract 和erface在Java语言中都是用来进行抽象类(本文 中抽象类并非从abstract 翻译而来它表示是个抽象体而abstract 为Java语言中用于定义抽象类种思路方法 请读者注意区分)定义那么什么是抽象类使用抽象类能为我们带来什么好处呢? 在 面向对象概念中我们知道所有对象都是通过类来描绘但是反过来却不是这样并不是 所有类都是用来描绘对象如果个类中没有包含足够信息来描绘个具体对象这样类就是抽象类抽象类往往用来表征我们在对问题领域进行分析、 设计中得出抽象概念是对系列看上去区别但是本质上相同具体概念抽象比如:如果我们进行个图形编辑软件Software开发就会发现问题领域存在着圆、 3角形这样些具体概念它们是区别但是它们又都属于形状这样个概念形状这个概念在问题领域是不存在它就是个抽象概念正是抽象概念 在问题领域没有对应具体概念所以用以表征抽象概念抽象类是不能够例子化 在面向对象领域抽象类主要用来进行类型隐藏 我们可以构造出个固定组行为抽象描 述但是这组行为却能够有任意个可能具体实现方式这个抽象描述就是抽象类而这组任意个可能具体实现则表现为所有可能派生类模块可以操作个 抽象体由于模块依赖于个固定抽象体因此它可以是不允许修改;同时通过从这个抽象体派生也可扩展此模块行为功能熟悉OCP读者定知 道为了能够实现面向对象设计个最核心原则OCP(Open-Closed Principle)抽象类是其中关键所在 从语法定义层面看abstract 和 erface 在语法层面Java语言对于abstract 和erface给出了区别定义方式下面以定义个名为Demo抽象类为例来介绍说明这种区别 使用abstract 方式定义Demo抽象类方式如下: abstract Demo{ abstract void method1; abstract void method2; … } 使用erface方式定义Demo抽象类方式如下: erface Demo{ void method1; void method2; … } 在abstract 方式中Demo可以有自己数据成员也可以有非 abstract成员思路方法而在erface方式实现中Demo只能够有静态不能被修改数据成员(也就是必须是 final 不过在erface中般不定义数据成员)所有成员思路方法都是abstract从某种意义上说erface是种特殊形式 abstract |