客官你好,花一首歌的时间了解下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
的成员变量,只能继承public
和protected
,但是能通过get方法访问到父类的private
成员变量 - 子类不能继承父类的
private
的成员方法,只能继承public
和protected
- 若子类可以继承父类成员变量,并且子类中出现了同名称的成员变量,就会发生隐藏,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用
- 若子类可以继承父类成员方法,并且子类中出现了同名称的成员方法,就会发生覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用