一.抽象类和接口的区别?
1. 接⼝的⽅方法默认是 public ,所有⽅方法在接⼝口中不不能有实现(Java 8 开始接⼝口⽅方法可以有默认实现),⽽而抽象类
可以有⾮非抽象的⽅方法。
2.接⼝口中除了了 static 、 final 变量量,不不能有其他变量量,⽽而抽象类中则不不⼀一定。
3.⼀一个类可以实现多个接⼝口,但只能实现⼀一个抽象类。接⼝口⾃自⼰己本身可以通过 extends 关键字扩展多个接⼝口。
4.接⼝口⽅方法默认修饰符是 public ,抽象⽅方法可以有 public 、 protected 和 default 这些修饰符(抽象⽅方法就是
为了了被重写所以不不能使⽤用 private 关键字修饰!)。
5. 从设计层⾯面来说,抽象是对类的抽象,是⼀一种模板设计,⽽而接⼝口是对⾏行行为的抽象,是⼀一种⾏行行为的规范。
二.项目中抽象类的实际应用
背景:项目以不同方式,如消息队列,读取数据库,调用接口等组合存储数据到数据库,实际上步骤可以抽象出来一套统一的模板。
public abstract class BaseProcessTpData<T, R> {private int intervalDays = 1; public int getIntervalDays() { return intervalDays; } public void setIntervalDays(int intervalDays) { this.intervalDays = intervalDays; } public void process(String date) { process(date, true); } //处理过程 public void process(String date, boolean isDeleteData) { long executeCount = 0; try { LocalDateTime startTime = DateTimeUtil.stringToTime(date); LocalDateTime endTime = startTime.plusDays(getIntervalDays()); while (startTime.isBefore(endTime)) {
//获取数据 List<T> list = getDataFromDb(startTime, startTime.plusSeconds(getIntervalSeconds())); if (!CollectionUtils.isEmpty(list)) {
//组装数据 List<R> dbList = convertToDbEntity(list);
//插入数据 insertToDb(dbList); executeCount += dbList.size(); } startTime = startTime.plusSeconds(getIntervalSeconds()); } } catch (Exception ex) { } }
抽象类中的抽象方法 * 每次查询间隔时间(单位:秒) protected abstract long getIntervalSeconds(); * 从db获取数据 protected abstract List<T> getDataFromDb(LocalDateTime startTime, LocalDateTime endTime) throws SQLException; * 处理数据 protected abstract List<R> convertToDbEntity(List<T> list) throws Exception; * 插入数据 protected abstract boolean insertToDb(List<R> list) throws SQLException; * 删除数据 protected abstract int deleteData(String date) throws SQLException; * 数据类型 protected abstract String getDataType();
标签:应用,abstract,List,public,protected,startTime,抽象类,实际 From: https://www.cnblogs.com/developS/p/17629637.html