接口类和抽象类的本质区别

接口类和抽象类的本质区别

随着对java面向对象的概念逐渐的深入,逐渐发现接口可以实现的功能,抽象类也可以实现,特别是随着jdk1.8的发布,接口也可以实现默认方法类。对此查阅了很多博客,发现大部分其实讲的都是使用层面的区别,后来又找到一篇讲的很好的博客(有点久了,不太清楚是哪篇了),又翻阅了书籍《effective java第三版》,逐渐理解更透彻了。
这份博客是从自己的有道云笔记拷贝出来的,所以对引用了别人的文章部分,找不到文章链接了,见谅。

单继承和多实现的区别

抽象类只允许单继承,接口可以进行多实现。
从程序的设计角度来看,一种类型可以封装成一个接口或者抽象类。
但是一个人或者一样东西是允许有多种不冲突的类型的,比如一个人可以开车、可以吃东西、可以运动。开车还可以分开为开什么车,吃东西可以分为中西日韩餐,运动分开篮球、足球、跑步等等。
这个时候人就可以拥有多种特性,抽象类的单继承就无法实现,这种时候只能选择实现接口。

抽象范围的区别

java设计他们时的定义方向就完全不同。
抽象类:对事物的抽象,即对类的抽象,对类的每个属性、方法进行了抽象。
接口:对行为进行抽象,对类的行为(方法)部分进行了抽象。

举例:

抽象:比如对人进行抽象,五官和肢体的描述可以抽象为抽象类。打篮球、跳水、打游戏可以抽象为接口。
原因:五官和肢体是每个人都具有的组成部分,只是有所不同罢了。但是不是每个人都具备打篮球、跳水、打游戏的能力。
从使用上的区别来解释,抽象类的抽象方法是必须被普通子类实现的,说明人这个对象是必须要对这些抽象属性进行覆盖。
接口是可以选择性实现的,即一个人如果具备打篮球、跳水的能力,实现这两个接口方法即可。

设计层面的区别

这部分是从别人博客精简摘抄过来的。
抽象类:是一种模板式设计。如果父类和子类的公共部分需要改动,只改动父类即可,如电梯后来安装了烟感器,只需要在抽象类添加一个烟感器描述方法,并添加具体的实现,子类不需要变更。
接口:是一种辐射式设计。接口一旦进行了变更,比如民用飞机因为安全问题取消了武器配置,他的实现类全部都需要进行相应的改动。

你可能感兴趣的:(java基础)