一、抽象类和接口区别
1、抽象类
(1)特性:
不能被实例化,只能被继承
可以包含属性和方法
方法既可包含代码实现,也可不包含代码实现,不包含代码实现的方法叫抽象方法
子类继承抽象类,必须实现抽象方法
(2)作用
对成员变量和方法的抽象
是一种is-a关系,解决代码复用问题,自下而上设计,先有子类代码重复,然后再抽象成上层父类
2、接口
(1)特性:
不含有属性,只能声明方法
方法不能包含代码实现
类实现接口必须实现声明方法
(2)作用
仅对方法的抽象
是一种has-a关系,表示具有某一组行为特性,是为了解决解耦问题,提高代码的扩展性
二、设计原则:基于接口而非实现编程
1、定义:
接口实现接口和实现分离,封装不稳定的实现,暴露稳定的接口,上游系统面向接口而非实现编程,当实现变化,上游代码基本不需要变,以此来降低耦合性,提高扩展性。这样可以在不破坏原有代码设计情况下,灵活应对需求变化
2、应用:
比如,在做文件上传下载功能时,抽象出一个文件上传下载的接口,然后创建一个阿里云文件存储类去实现。当有其他私有云存储进来时,也可以基于这个接口实现。
3、方法:
在软件开发时,要有抽象和接口意识
接口定义命名要通用,不能包含跟具体实现相关的字眼
与特定实现有关的方法不要定义在接口中