Java 类继承写法:代码复用的实用技巧

在开发一个电商后台系统时,经常会遇到商品、订单、用户这些模块有部分功能是重复的。比如每个实体都需要记录创建时间和更新时间。如果每个都重新写一遍,不仅费劲还容易出错。这时候,Java类继承就派上用场了。

什么是类继承

类继承就是让一个类“拿”另一个类的属性和方法,避免重复编码。子类可以拥有父类的功能,还能自己扩展新功能。用关键字 extends 来实现。

public class Product extends BaseEntity {
    private String name;
    private double price;

    // 构造函数
    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    // getter 和 setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

上面的 Product 类继承了 BaseEntity,假设这个父类已经封装好了创建时间、更新时间等字段和通用方法,子类直接就能用。

父类怎么写

父类一般会把共用的部分抽出来。比如所有数据库实体都有 ID 和时间戳,那就集中定义。

public class BaseEntity {
    protected Long id;
    protected long createTime;
    protected long updateTime;

    public BaseEntity() {
        this.createTime = System.currentTimeMillis();
        this.updateTime = System.currentTimeMillis();
    }

    public void updateTimestamp() {
        this.updateTime = System.currentTimeMillis();
    }

    // getter 和 setter
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public long getCreateTime() {
        return createTime;
    }

    public long getUpdateTime() {
        this.updateTime = System.currentTimeMillis();
    }
}

注意这里用了 protected,这样子类能访问,但外部不能随便改,安全又灵活。

继承的实际好处

项目里一旦有十几个实体类,每个都手动加时间字段和初始化逻辑,改一次就得动十多处。用了继承,改父类一处,所有子类自动生效。省事不说,还减少出错概率。

再比如做图形渲染程序,圆形、矩形、三角形都有“计算面积”的方法。可以把这个方法放在父类 Shape 里声明为抽象方法,强制子类实现,结构清晰,调用统一。

小心别过度继承

不是所有情况都适合继承。比如有个 Vehicle 类,下面分汽车、飞机、轮船。但如果某天要加个“能飞”的功能,飞机合适,汽车不行。这时候用接口(interface)更合适。继承解决的是“是什么”的问题,接口解决“能做什么”。

日常开发中,合理使用继承能让代码更干净,维护起来也轻松。关键是找准共性,把可复用的部分拎出来,别为了继承而继承。