有時候,我們會碰到另外的一種情況,比如,銀行利息的計算,都是利率乘以本金和存款時間,但是,各種存款方式計算利率的方式的不同,一般而言,定期的存款利率比活期的利率要高;而定期的時間越長,它的利率也越高。因此,我們在設計「銀行賬戶」這個類的時候,我們可以將計算利息這個方法定義成抽象方法,然後,再在各種不同型別賬號的子類中來具體實現這個方法。但是,對於這個方法而言,有更好的一種設計思路:將這個方法中計算利息的演算法骨架搭建出來,而對於一些細節,推遲到子類中來實現。這種設計的好處是,避免了子類設計中的隨意性。
我們來看上面這個思路的實現方式。
abstract class loanaccount
public void setfund(double fund)
public double getfund()
/*** 不同的存款型別有不同的利率, 因此,不在這個父類中實現利率的計算方法, 而將它推遲到子類中實現
*/protected abstract double getinterestrate();
}對於剛才討論的銀行的賬戶的例子,我們可以給所有型別的賬戶定義乙個超類loanaccount,在這個超類中,有乙個用於計算利息的方法caculateinterest(),已經將它的演算法寫好了,這個方法返回乙個「本金*利率」 的值。但是,因為其中的利率根據存款型別的不同而不同,所以沒有具體的實現獲得利率的方法,所以,將這個獲得利率的方法放到子類中去實現,根據不同的子類,設計出不同的獲得利率的方法。
下面是繼承了這個抽象類的乙個子類:
class accounta extends loanaccount
}在這個子類中,沒有加上自己的屬性,它只是簡單的實現了父類中的抽象方法getinterestrate,這樣,這個類就成了乙個完整的賬戶類了。可以使用以下的方式來使用這個類:
public class testaccount
}
抽象類 模板方法設計模式
一 抽象類的應用 1 概念 當多個類存在相同的功能時,我們就可以把這些功能提出出來,單獨封裝在乙個類裡面,只提出方法名,不提出方法實體就是功能的主體部分不同,我們進行向上抽取,只抽取功能的定義部分,不抽取功能的主體。2 abstract,抽象的,可以修飾類和方法,被修飾的方法只能有方法名,沒有方法實...
20 抽象類與模板設計模式
1 抽象類是含有抽象方法的類。抽象方法沒有方法體,必須用abstract定義。abstract class a 普通方法 public abstract void print 抽象方法 public class demo 結果顯示,無法直接例項化抽象類物件.普通類的物件例項化後,該物件可以呼叫類中的...
抽象類的模板方法設計模式
一 前言 抽象類體現的就是一種模板模式的設計,抽象類作為多個子類的通用模板,子類在抽象類的基礎上進行擴充套件 改造,但子類總體上會保留抽象類的行為方式。二 模板方法能解決的問題 1 當功能內部一部分實現是確定的,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。2 編寫乙個抽象父類...