Java文檔說NumberFormat
是一個抽象類。但下面這行代碼讓我感到困惑。在Java中使用抽象類
NumberFormat nf = NumberFormat.getInstance();
我們如何利用這個NumberFormat.getInstance()
時NumberFormat
是一個抽象類? 任何人都可以幫助我理解這個請嗎?
Java文檔說NumberFormat
是一個抽象類。但下面這行代碼讓我感到困惑。在Java中使用抽象類
NumberFormat nf = NumberFormat.getInstance();
我們如何利用這個NumberFormat.getInstance()
時NumberFormat
是一個抽象類? 任何人都可以幫助我理解這個請嗎?
getInstance()
方法返回NumberFormat的子類 - 您的語言環境的默認值。
NumberFormat.getInstance()
是static factory method,它可以返回抽象NumberFormat
類的具體子類的實例:
這件事情是這樣的:
abstract class Instrument {
public static Instrument getInstance() {
return new Guitar();
}
}
class Guitar extends Instrument { }
所以,當你撥打:
Instrument.getInstance();
你會得到一個Guitar
的實例,它是一個具體的子類。
NumberFormat.getInstance()
默認返回非抽象DecimalFormat
實現。
您可以致電NumberFormat.getInstance()
因爲這是一種靜態方法。你不需要一個類的實例來調用該類的靜態方法。
NumberFormat.getInstance()
可以聲明的NumberFormat
返回類型,因爲它會實際上返回的具體子類的實例 - 但在同樣的方式,這個作品是與NumberFormat
兼容:
String x = "test";
Object y = x;
如果打印出來NumberFormat.getInstance().getClass()
你會看到哪個實際具體子類正在使用 - 但你不應該依賴它返回任何特定的類;問題是你只是想使用NumberFormat
本身指定的方法。
'NumberFormat.getInstance'是一個靜態方法。抽象類可以有靜態方法。顯然,這個返回'NumberFormat'的子類('NumberFormatImpl',也許?) – 2013-02-19 14:10:33