抽象类重点在于代码复用,接口重点在于规范。如果基于接口的子类有相同的代码逻辑,请使用抽象类作为中间层。
理解了抽象类和接口,就掌握了面向对象的本质了,少林易筋经,华山独孤九剑,无招胜有招...
抽象类和接口:
1、当我们需要一组规范的方法的时候,我们就可以用接口,在具体的业务中,来对接口进行实现,能达到以不变应对万变,多变的需求的情况我们只需要改变对应的实现类 。
2、如果多个实现类中有者相同可以复用的代码 这个时候就可以在实现类和接口之间,添加一个抽象类,把公共的代码抽出在抽象类中。然后要求不同实现过程的 子类可以重写抽象类中的方法,来完成各自的业务。
什么时候使用抽象类和接口?
•如果拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
•如果想实现多重继承,那么必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此就可以使用接口来解决它。
•如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类
下面接着再说说两者在应用上的区别。接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有HTTP请求都要用相同的方式进行权限判断、访问日志记录和异常处理,那么就可以定义一个抽象的基类,让所有的controller都继承这个抽象基类,在抽象基类的service方法中实现上述功能,在各个子类中只是完成各自的业务逻辑代码。
父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式
https://blog.csdn.net/weixin_43732955/article/details/95237392
https://www.cnblogs.com/east7/p/10580245.html