当前位置:网站首页>继承和实现该如何选择
继承和实现该如何选择
2022-08-05 18:04:00 【IT盛夏的果实】
平时在我们工作中应该可以看到大量继承和实现的代码,那么此时就有一个问题了,什么时候用继承(extends),什么时候用实现(implements)呢?
1. 什么时候用到继承?
如果说项目中有重复的代码块,可以将这些重复的代码块收提取出来放到一个公共类中,让其他的模块继承这个类。例如:
public class EasySqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
// 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法
List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
return methodList;
}
}我在用到mybatisplus批量插入的时候构造了一个sql注入器,我让其继承了一个DefaultSqlInjector类,那么这个类就相当于父类,并且用到了父类中getMethodList方法,这个方法就相当于公用的代码,如果还有其他子类想要使用这个方法时只需继承这个类就好。

所以说:当有重复的代码块时,将其抽取出来放到一个公共类中,使其子类继承这个类即可。
2 . 什么时候用到实现?
如果项目中的模块都遵循于一个规范,这个规范每个模块的实现参数都不同,那么可以将这些参数都提取到接口中,其他模块实现此接口定义自己的相关功能即可。例如:


一个AbstractSqlInjector实现了ISqlInjector这样的一个接口,可以发现接口中定义了一套规则(没有具体的方法体,只有方法和参数),当有其他的类想要用到这套规则时自己实现该接口就好。
边栏推荐
- 使用腾讯云对象存储 COS + PicGo 搭建图床服务
- 智能合约安全——随机数
- A new generation of host security four big core technologies and 15 application scenario
- ERMiner: Sequential Rule Mining Using Equivalence Classes
- IntelliJ IDEA 2022.2最新版本如何激活
- 认识一下MRS里的“中间人”Alluxio
- 小程序 路由传参 技能升级
- 《进阶指南》0x01 复盘
- Time-series database selection and implementation practice for Xingsheng optimal monitoring scenarios
- uniapp中用canvas实现小球碰撞的小动画
猜你喜欢
随机推荐
canvas线条下雨js特效代码
对话窗口、面板滚动视图、标签切换视图;QDialog、QScroollArea、
C语言的文件操作
playwright录制脚本
金仓数据库KingbaseES客户端编程接口指南-DCI(2. 概述)
数学笔记查阅
Jmix - a new way to efficiently develop business systems
金仓数据库 KingbaseES V8 GIS 数据迁移方案(5. 第三方通用格式 GIS 数据迁移到 KES)
在SaaS时代,帮助中心成为了许多企业的选择
小程序 路由传参 技能升级
再做螺旋矩阵AcWing753 756【写法妙】
canvas实现多个图片合成js特效
img幽灵空白的解决方法
PNAS:alpha频率经颅电刺激调控大脑默认网络
齐岳|超支化聚缩水甘油接枝磁性Fe3O4纳米粒子(HPG-grafted MNPs)
js文字开场百叶窗js特效
想问一下,安装box的时候报这个错误,但是数据库容器起的都能用,是什么原因造成的啊?1.02和1.0
金鱼哥RHCA回忆录:CL210管理计算资源--课外普及之Heat组件详解
【2012】【论文笔记】超材料的二维等价物——GSTC
WPF 截图控件之绘制箭头(五)「仿微信」









