• 继承和实现该如何选择


    平时在我们工作中应该可以看到大量继承和实现的代码,那么此时就有一个问题了,什么时候用继承(extends),什么时候用实现(implements)呢?

    1. 什么时候用到继承?

    如果说项目中有重复的代码块,可以将这些重复的代码块收提取出来放到一个公共类中,让其他的模块继承这个类。例如:

    1. public class EasySqlInjector extends DefaultSqlInjector {
    2. @Override
    3. public List<AbstractMethod> getMethodList(Class mapperClass, TableInfo tableInfo) {
    4. // 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法
    5. List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
    6. methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
    7. return methodList;
    8. }
    9. }

    我在用到mybatisplus批量插入的时候构造了一个sql注入器,我让其继承了一个DefaultSqlInjector类,那么这个类就相当于父类,并且用到了父类中getMethodList方法,这个方法就相当于公用的代码,如果还有其他子类想要使用这个方法时只需继承这个类就好。

    所以说:当有重复的代码块时,将其抽取出来放到一个公共类中,使其子类继承这个类即可。

    2 . 什么时候用到实现?

    如果项目中的模块都遵循于一个规范,这个规范每个模块的实现参数都不同,那么可以将这些参数都提取到接口中,其他模块实现此接口定义自己的相关功能即可。例如:

    一个AbstractSqlInjector实现了ISqlInjector这样的一个接口,可以发现接口中定义了一套规则(没有具体的方法体,只有方法和参数),当有其他的类想要用到这套规则时自己实现该接口就好。

  • 相关阅读:
    skywalking springgateway 全链路
    顺序表练习
    关于3D-AIGC的调研与探讨
    Springboot毕设项目旅游信息采集管理与分享系统n2qez(java+VUE+Mybatis+Maven+Mysql)
    java基于微信小程序的在线外卖订餐系统 uniapp
    ShuffleNet v2网络结构复现(Pytorch版)
    第一章 计算机网络概述
    蓝桥杯双周赛算法心得——三带一(暴力枚举)
    千兆光模块和万兆光模块的差别是什么?
    使用DMFLDR工具将Excel数据导入到达梦数据库
  • 原文地址:https://blog.csdn.net/qq_50652600/article/details/126172768