1、抽象类是解决代码复用的,接口类则是解决抽象而不是代码复用:抽象类是一种自下而上的设计思路,先有子类的重复,再抽象成父类。而接口正好相反,是先定义接口(类似一个协议),是自上而下的。
抽象类和接口的语法特点:抽象类不能被实例化,能被继承,它可以包含属性和方法,方法可以包含实现,没有实现的方法称为抽象方法,继承抽象类的类要实现它的所有抽象方法。而接口类则只能包含抽象方法,不能有属性和方法实现,实现接口的类必须实现接口所有抽象方法。
原则:基于接口而非实现编程也叫基于抽象而非实现编程
越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。好的代码设计,不仅能应对当下的需求,而且在将来需求发生变化的时候,仍然能够在不破坏原有代码设计的情况下灵活应对。
原则核心:接口的定义只表明做什么,而不是怎么做。
这条原则的设计初衷是,将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低代码间的耦合性,提高代码的扩展性。