导读:本期聚焦于小伙伴创作的《如何在Java里让继承更自然地表达业务_从抽象开始的设计》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Java里让继承更自然地表达业务_从抽象开始的设计》有用,将其分享出去将是对创作者最好的鼓励。

在Java面向对象开发中,继承是实现代码复用和业务逻辑分层的重要手段,但如果缺乏合理的抽象设计,很容易出现继承层级混乱、业务逻辑表达模糊的问题。从抽象开始设计继承结构,能够让代码更贴合业务本质,让后续的扩展和维护更加顺畅。

如何在Java里让继承更自然地表达业务_从抽象开始的设计

为什么需要从抽象开始设计继承

很多开发者在写继承代码时,习惯先写具体的业务类,遇到重复代码再把共性抽到父类里,这种方式会导致父类的设计缺乏整体规划,往往只能抽离零散的代码片段,无法形成统一的业务抽象。从抽象开始设计,是先梳理业务中的核心共性和差异,定义一个清晰的抽象父类,再让子类去实现具体的业务逻辑,这样继承结构从一开始就和业务模型对齐。

抽象类的核心设计要点

抽象类在继承设计中承担着定义业务骨架的作用,设计时需要遵循几个原则:

  • 只定义所有子类共有的业务属性和行为,不要包含某个子类特有的逻辑
  • 对于共性的行为如果有统一的默认实现,可以定义为非抽象方法,如果实现逻辑子类差异大,就定义为抽象方法让子类重写
  • 抽象类的命名要体现业务共性,比如支付业务中可以命名为Abstract_Payment,而不是模糊的Base_Class

业务场景案例:电商订单处理

我们以电商平台的订单处理为例,平台有普通订单、秒杀订单、预售订单三种类型,三种订单都有创建、支付、发货的核心流程,但每个流程的具体逻辑有差异。我们先定义抽象订单类:

// 抽象订单类,定义订单处理的业务骨架
public abstract class Abstract_Order {
    // 订单编号
    protected String orderId;
    // 订单金额
    protected double amount;

    public Abstract_Order(String orderId, double amount) {
        this.orderId = orderId;
        this.amount = amount;
    }

    // 抽象方法:创建订单,子类实现具体逻辑
    public abstract void createOrder();

    // 抽象方法:处理支付,子类实现具体逻辑
    public abstract void processPayment();

    // 抽象方法:处理发货,子类实现具体逻辑
    public abstract void deliverGoods();

    // 非抽象方法:订单处理的通用流程,定义业务骨架
    public void handleOrderFlow() {
        createOrder();
        processPayment();
        deliverGoods();
    }

    // 共用的工具方法:打印订单基础信息
    protected void printOrderBaseInfo() {
        System.out.println("订单编号:" + orderId + ",订单金额:" + amount);
    }
}

接下来分别实现三种具体的订单子类:

// 普通订单子类
public class Normal_Order extends Abstract_Order {
    public Normal_Order(String orderId, double amount) {
        super(orderId, amount);
    }

    @Override
    public void createOrder() {
        printOrderBaseInfo();
        System.out.println("创建普通订单,无额外限制");
    }

    @Override
    public void processPayment() {
        System.out.println("普通订单支付,支持所有支付方式");
    }

    @Override
    public void deliverGoods() {
        System.out.println("普通订单发货,1-3个工作日送达");
    }
}

// 秒杀订单子类
public class Seckill_Order extends Abstract_Order {
    // 秒杀活动的开始时间
    private long seckillStartTime;

    public Seckill_Order(String orderId, double amount, long seckillStartTime) {
        super(orderId, amount);
        this.seckillStartTime = seckillStartTime;
    }

    @Override
    public void createOrder() {
        printOrderBaseInfo();
        System.out.println("创建秒杀订单,活动开始时间:" + seckillStartTime);
    }

    @Override
    public void processPayment() {
        System.out.println("秒杀订单支付,仅支持余额支付,15分钟内未支付自动取消");
    }

    @Override
    public void deliverGoods() {
        System.out.println("秒杀订单发货,支付后24小时内发出");
    }
}

// 预售订单子类
public class Pre_Sale_Order extends Abstract_Order {
    // 预售尾款支付截止时间
    private long finalPaymentDeadline;

    public Pre_Sale_Order(String orderId, double amount, long finalPaymentDeadline) {
        super(orderId, amount);
        this.finalPaymentDeadline = finalPaymentDeadline;
    }

    @Override
    public void createOrder() {
        printOrderBaseInfo();
        System.out.println("创建预售订单,需先支付定金");
    }

    @Override
    public void processPayment() {
        System.out.println("预售订单支付,尾款支付截止时间:" + finalPaymentDeadline);
    }

    @Override
    public void deliverGoods() {
        System.out.println("预售订单发货,尾款支付后7-15个工作日送达");
    }
}

使用这些类的示例如下:

public class Order_Test {
    public static void main(String[] args) {
        // 创建普通订单并处理
        Abstract_Order normalOrder = new Normal_Order("N001", 199.9);
        normalOrder.handleOrderFlow();

        System.out.println("----------");

        // 创建秒杀订单并处理
        Abstract_Order seckillOrder = new Seckill_Order("S001", 99.9, System.currentTimeMillis() + 3600000);
        seckillOrder.handleOrderFlow();
    }
}

设计时的注意事项

在使用这种从抽象开始的继承设计时,要避免两个常见误区:

  • 不要为了复用代码而强行设计继承,如果两个类没有明确的业务上的父子关系,即使有重复代码也不适合用继承,更适合用组合的方式实现复用
  • 抽象类的抽象方法不要定义得过多,否则子类需要实现的逻辑太多,会增加子类的负担,通常一个抽象类定义2-5个抽象方法比较合理,其他共性逻辑用非抽象方法实现

通过从抽象开始设计继承结构,能够让Java里的继承更准确地表达业务逻辑,让代码的层级关系和业务模型保持一致,后续新增订单类型时,只需要继承Abstract_Order实现对应的抽象方法即可,不需要修改原有代码,符合开闭原则。

Java继承抽象类面向对象设计业务建模修改时间:2026-06-12 17:36:21

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。