- 参考以下大佬文章
抽象类(Abstract Class)
是什么?
- 官方:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但本质上相同的具体概念的抽象。
- 说人话:比如我们熟悉的泰迪,二哈,阿拉斯加等等,他们大小形态有很大区别,我们如何把他们抽象一下呢?就是把它们本质上相同的一些东西给抽象出来,比如,他们都有耳朵,尾巴,四肢等等,至于耳朵时是什么样子的,尾巴是长是短?这就交给子类来实现狗这个抽象方法了。
作用
- 用于隐藏
对类型进行隐藏,我们可以构造出一个固定的一组行为的抽象类型,一个行为可以有任意个可能的具体实现方式(参考多态)。这个抽象的描述就是抽象类。 - 用于拓展对象行为功能
这一组任意个可能的具体实现表现为所有可能的子类,模块可以操作一个抽象类,由于模块依赖于一个固定的抽象类,那么它是不允许修改的,同时通过这个抽象类进行派生,拓展此模块的行为功能。(参考开闭原则)
接口(Interface)
是什么?
- 泛指实体把自己提供给外界的一种抽象化,用以由内部操作分理处外部构造方法,使其能内部修改而不影响外界其他实体与其交互的方式。
- 说人话:接口就是一种特殊的 Abstract Class,但是比 Abstract Class 更抽象
语法
语法 | 备注 |
---|---|
作用
- 弥补 java类的单继承的问题,曲线救国,作为继承关系的一个补充
- 把程序模块进行固化的契约,降低耦合。把若干功能拆分出来,按照契约来进行实现和依赖。(依赖倒置原则)
- 定义接口有利于代码的规范。(接口分离原则)
抽象是一种模板设计,接口是一种行为规范
- 对于一个模板而言,我们只需要修改模板中的方法,那么所有子类的方法就能得到更新;对于接口中方法,需要在所有实现类中自行修改,才能得到更新,并且互不相干。