欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

客官你好,花一首歌的时间了解下java继承

程序员文章站 2022-06-21 10:38:22
...

写pojo层时,因为数据库中的每张表都会有id、gmt_create和gmt_modified字段,那么对应到每个pojo类上都会需要有id、gmtCreate和gmtModified字段,这样就会造成很多pojo类都会出现重复字段,于是想到继承来解决重复字段的问题

抽象类:SuperPO.java

@Data
@EqualsAndHashCode(callSuper = true)
public abstract class SuperPO extends Model<SuperPO> {
    /**
     * 主键
     * */
    @TableId(value="id",type= IdType.AUTO)
    private Long id;

    /**
     * 创建时间
     */
    @TableField(value = "gmt_create")
    private Date gmtCreate;

    /**
     * 修改时间
     */
    @TableField(value = "gmt_modified", update = "now()")
    private Date gmtModified;

    @Override
    protected Serializable pkVal() {
        return id;
    }
}

子类:Commodity.java

@Data
@TableName("commodity")
@EqualsAndHashCode(callSuper = true)
public class Commodity extends SuperPO {
    /**
     * 商品所在店铺.
     */
    @TableField("shop_id")
    private Long shopId;

    /**
     * 商品名称.
     */
    @TableField("name")
    private String name;

    /**
     * 商品描述.
     */
    @TableField("description")
    private String description;

    /**
     * 商品价格.
     */
    @TableField("price")
    private Integer price;
}

可以看出使用了继承,Commodity.java类很简洁

使用继承的优缺点

  • 优点:
    • 代码冗余度低、可复用性强
    • 易维护
  • 缺点:
    • 独立性差,依赖父类,耦合性强

使用继承需要的注意点

  • 子类不能继承父类的private的成员变量,只能继承publicprotected,但是能通过get方法访问到父类的private成员变量
  • 子类不能继承父类的private的成员方法,只能继承publicprotected
  • 若子类可以继承父类成员变量,并且子类中出现了同名称的成员变量,就会发生隐藏,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用
  • 若子类可以继承父类成员方法,并且子类中出现了同名称的成员方法,就会发生覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用