JAVA基础知识点:继承

这是一个零散的JAVA基础知识点:继承

问题引出:

我写了这么一个类BasePojo

package com.jt.pojo;

import java.io.Serializable;
import java.util.Date;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.experimental.Accessors;

//pojo基类,完成2个任务,2个日期,实现序列化
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{


	//@TableField是MP中定义的注解,有了这个注解,还需要再编辑个自动赋值处理器,才能做到,以后在执行数据库操作时,不用手动地再去修改这两个时间了。

	//可是配置了MyMetaObjectHandler,想注释掉ItemServiceImpl中的item.setUpdated(new Date()); 还是会报错,updated不能为空

	/**创建日期*/
	//新增时有效
	@TableField(fill = FieldFill.INSERT)
	private Date created;
	
	/**修改日期*/
	//新增/修改时 有效
	@TableField(fill = FieldFill.INSERT_UPDATE)
	private Date updated;

}

我又写了这么一个类Item

package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import lombok.Data;
import lombok.experimental.Accessors;

@JsonIgnoreProperties(ignoreUnknown=true) //表示JSON转化时忽略未知属性
@TableName("tb_item")
@Data
@Accessors(chain=true)
public class Item extends BasePojo{
	@TableId(type=IdType.AUTO)
	private Long id;				//商品id
	private String title;			//商品标题
	private String sellPoint;		//商品卖点信息
	private Long   price;			//商品价格 Long > double  算算数时Long算得更快,并且double存在精度问题(算得不准)
									//如果一个商品的价格是9.58元,它在存储到数据库中时会*100。数据库在将数据返回时,会再÷100。
	private Integer num;			//商品数量
	private String barcode;			//条形码
	private String image;			//商品图片信息   1.jpg,2.jpg,3.jpg
	private Long   cid;				//表示商品的分类id
	private Integer status;			//1正常,2下架
	
	//为了满足页面调用需求,添加get方法
	public String[] getImages(){
		
		return image.split(",");
	}
}

可见,Item类继承了BasePojo类,也就是说BasePojo是Item的爸爸。

由此,我就可以直接用Item对象调用BasePojo中的.setCreated()方法

那么问题来了:
Item为啥能调用.setCreated()方法呢?

在这里插入图片描述
分析:
父类BasePojo中的created和updated两个属性 都被private修饰,即这两个属性是父类私有的。
但父类中这两个属性所对应的get和set方法 可是被public修饰的,是公有的。
所以子类Item继承了父类中的get和set方法。

而子类Item在调用.setCreated()方法时,
item.setCreated();
得到的结果,还要赋给一个属性,一般这个属性还是叫created。
但注意:
这个created是在子类的内存空间中新new出来的。和父类BasePojo中的created没关系,只是名字恰好相同罢了。
所以子类Item中的这个created属性 是啥值,完全不受父类BasePojo的影响。

据说这个叫“乾坤大挪移”机制。
而我觉得这个更应该叫“克隆人”机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值