前言
这个知识点我之前就已经学过,但是我学的半桶水,就是只理解了比较表面的意思。我第一次面试的时候,面试官刚好就问了我这个问题,我一紧张,回答的磕磕绊绊的,很是尴尬。之后我就反思,发现其实我还是没有搞懂这两者真正的区别 ,或者是说我之前以为懂了只是懂了个表面,没有真正深入理解。今天刚好复习到这个知识点,就顺便写一篇文章梳理一下这个两个知识。
接口
我们先来讲讲抽象类。比如说有一个类叫 Animal,然后你想声明一个 eat() 方法并实现这个方法,但是你不知道怎么实现。其实你也想实现,但是这个方法你都不知道怎么实现,不知道写什么好。猫吃猫粮,狗吃狗粮,猪吃猪粮,动物吃什么粮?你自己也想实现,只是你都不知道怎么实现,因为你怎么实现都不对。
这个时候,干脆就不实现了,就声明这个方法算了,摆烂吧,让子类继承这个父类后,子类来实现这个 eat() 方法。比如说有一个子类 cat,这个 cat 类实现了这个 eat() 方法,方法内容是“猫吃猫粮”。又有一个子类 dog,它自己也实现了父类的 eat() 方法,方法内容是“狗吃狗粮”。反正不同的子类实现这个 eat() 方法要实现出自己的特色出来。抽象类可以实现多态。
而接口其实和抽象类很像,但是感觉接口更多的是用来定义规范。比如说我之前做的那个电商支付双系统项目,有一个用户注册登录模块,然后 service 层里面有一个接口,这个接口定义了两个方法:用户注册方法,用户登录方法。就是这个图:
让子类去实现这两个方法就好了。这样可以做到代码解耦,可扩展性强。