问题: 当一个Phone 如果也想获得保质期的方法,那需要从游戏点卡里将相关的属性和方法复制出来吗? 显然是不太方便的。那么怎么实现呢?
抽象类,提供一个抽象类,该抽象类实现有效期相关的接口。然后让Phone继承该抽象类即可
抽象类代码示例:
package day15;
import java.util.Date;
public abstract class AbstractExpireDateMerchandise extends MerchandiseV2 implements ExpireDateMerchandise {
private Date produceDate;
private Date expirationDate;
public AbstractExpireDateMerchandise(int id, String name, int count, double soldPrice, Date produceDate, Date expirationDate) {
super(id,name,count,soldPrice);
this.produceDate = produceDate;
this.expirationDate = expirationDate;
}
public boolean notExpireInDays(int days) {
return daysBeforeExpire() > days;
}
public Date getProduceDate() {
return produceDate;
}
public Date getExpireDate() {
return expirationDate;
}
public double leftDatePercentage() {
return 1.0 * daysBeforeExpire() / (daysAfterProduce() + daysBeforeExpire());;
}
public double actualValueNow(double leftDatePercentage) {
return soldPrice;
}
private long daysBeforeExpire() {
long expireMS = expirationDate.getTime();
long left = expireMS - System.currentTimeMillis();
// 过期了
if (left < 0) {
return -1;
}
return left / (24 * 3600 * 1000);
}
private long daysAfterProduce(){
long produceMS = produceDate.getTime();
long left = System.currentTimeMillis() - produceMS;
if (left < 0) {
return -1;
}
return left / (24 * 3600 * 1000);
}
}
说明:
- 抽象类使用
abstract
关键词修饰 - 抽象类可以继承别的类、实体类或者实现接口
- 抽象类不可以被实例化
- 抽象类也可以有自己的抽象方法
- 接口中可以给方法添加default关键词修饰,方法可以有方法体。
- 接口中是不可以有成员变量的,这是接口无法逾越的一条红线
网友评论