代码大全一书中说到,软件开发的本质上就是:对复杂度的控制管理。
开发过程中,我认为最大的复杂度来自“变化”,项目需求的变化,项目架构的变化,功能具体实现的变化等等。
而抽象类和接口正是我们工作中常用的用以解决具体实现变化的一种方式,它为我们提供了:“将接口和实现分离的方法”。这样,我们编码过程就可以面向接口而不是面向实现编程,这样当具体实现发生变化时,上游系统将基本不用做改动。
抽象类和接口本质上的目的都是一样的:“提供更加高度的抽象”。但是,接口相对于抽象类,它的抽象程度更进一步。
下面,我将从:(1): 语言语法
(2): 设计理念
两个层面对两者的差异,阐述下自己的见解。我认为,两者更加重要的差异是设计层面的差异,也是两者最本质的差异。
一:语言语法差异
两者的语法差异是大家比较熟知的差异,网上比比皆是,下面进行具体的阐述。
1. 方法
抽象类可以提供方法的具体实现,而JDK1.8之前的接口方法都默认是 public abstract的。但是JDK1.8之后,接口方法可以有static方法和通过default关键字提供默认方法实现了。
实现类可以直接通过接口类名访问接口的static方法,通过接口实现类的对象访问其默认方法,或者实现类对接口默认方法进行覆写。当类实现多个接口,超过2(含)个接口有一样签名的方法时,实现类就必须对相应的默认方法进行覆写,不然编译器无法