2013-02-19 61 views
0

Java文檔說NumberFormat是一個抽象類。但下面這行代碼讓我感到困惑。在Java中使用抽象類

NumberFormat nf = NumberFormat.getInstance(); 

我們如何利用這個NumberFormat.getInstance()NumberFormat是一個抽象類? 任何人都可以幫助我理解這個請嗎?

+0

'NumberFormat.getInstance'是一個靜態方法。抽象類可以有靜態方法。顯然,這個返回'NumberFormat'的子類('NumberFormatImpl',也許?) – 2013-02-19 14:10:33

回答

2

getInstance()方法返回NumberFormat的子類 - 您的語言環境的默認值。

6

NumberFormat.getInstance()static factory method,它可以返回抽象NumberFormat類的具體子類的實例:

這件事情是這樣的:

abstract class Instrument { 
    public static Instrument getInstance() { 
     return new Guitar(); 
    } 
} 

class Guitar extends Instrument { } 

所以,當你撥打:

Instrument.getInstance(); 

你會得到一個Guitar的實例,它是一個具體的子類。

0

NumberFormat.getInstance()默認返回非抽象DecimalFormat實現。

2

您可以致電NumberFormat.getInstance()因爲這是一種靜態方法。你不需要一個類的實例來調用該類的靜態方法。

NumberFormat.getInstance()可以聲明的NumberFormat返回類型,因爲它會實際上返回的具體子類的實例 - 但在同樣的方式,這個作品是與NumberFormat兼容:

String x = "test"; 
Object y = x; 

如果打印出來NumberFormat.getInstance().getClass()你會看到哪個實際具體子類正在使用 - 但你不應該依賴它返回任何特定的類;問題是你只是想使用NumberFormat本身指定的方法。