首先,我要建立一个新的MfDateSub class来表示[日期],并使其成为Date的subclass:
class MfDateSub extends Date
然后,我需要处理Date和我的extension class之间的不同处。MfDateSub构造函数需要委托(delegating)给Date构造函数:
public MfDateSub(String dateString) {
super(dateString);
}
现在,我需要加入一个转型构造函数,其参数是一个隶属原类的对象:
public MfDateSub(Date arg){
super(arg.getTime());
}
现在,我可以在extension class中添加新特性,并使用Move Method(142)将所有外加函数(foreign method)搬移到extension class。于是,下面的代码:
client class...
private static Date nextDay(Date arg) {
return new Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1);
}
经过搬移之后,就成了:
class MfDate...
Date nextDay() {
return new Date(getYear(), getMonth(), getDate() + 1);
}