首先,我要建立一個新的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);
}