Java 继承抽象类与实现接口

作为Java的初学者,一开始很纠结于抽象类与接口之间的异同,经过一段时间的学习,记录一下体会吧,免得以后忘了。

最通俗的理解:

抽象类与子类的关系像是“轿车”与“品牌”的关系,一样的油门刹车,近似的外形,几乎差不多的开车方式(大部分方法与属性具有共性),在轿车的基础之上,我们可以开一个天窗,加一个行李架(扩展功能)或者选择以下手动自动挡车型(覆写父类,此时这个手动自动完全可以用来代表抽象方法)。

而接口与实现接口的类之间的关系可以宽泛到“车”与“每种车”的关系,最简单的区别,所有的车都能开(交通工具哈,想到过山车的墙角罚站去),但是很明显学会骑自行车咱不能就直接去开汽车上路,虽然都叫“开(骑)车”(方法名),但是很明显操作手法不一样(具体方法不同)。

现在问题来了,抽象类明显可以完成接口的工作吧,通过覆写父类的方法就可以达到与实现接口相同的功能,那还要接口干什么?这个问题也是当时最困扰我的地方,现在从三个方面说一下解释吧。代码操方面,Java不支持多继承,但是支持实现多个接口所以在某些时候抽象类会有所局限。代价方面,如果有方法会被多个子类不做改变地实现,选择抽象类挺好,但是当方法会被几乎所有子类改变的时候,看情况吧,要是之后要加上通用功能,参照前面,要是需要”多继承“那就是接口了。逻辑方面:抽象类与子类从本质上是一样的,而接口就是个招牌,谁要就给谁(实现),但是它也不管那些类到底干啥(夸张了)。

https://blog.csdn.net/Hhc0917/article/details/54755001大神的博客

猜你喜欢

转载自www.cnblogs.com/yunzhui/p/9199720.html