簡體   English   中英

在Java中使用抽象類

[英]Using an abstract class in Java

Java文檔說NumberFormat是一個抽象類。 但是以下代碼使我感到困惑。

 NumberFormat nf = NumberFormat.getInstance();

NumberFormat是抽象類時,我們如何使用此NumberFormat.getInstance() 有人可以幫我理解這一點嗎?

NumberFormat.getInstance()是一個靜態工廠方法 ,它可以返回抽象NumberFormat類的具體子類的實例:

就像這樣:

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

class Guitar extends Instrument { }

因此,當您致電:

Instrument.getInstance();

您將獲得Guitar的實例,這是一個具體的子類。

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

您可以調用 NumberFormat.getInstance()因為它是靜態方法。 您不需要類的實例即可在該類上調用靜態方法。

NumberFormat.getInstance()可以聲明的返回類型NumberFormat ,因為它實際上將返回一個具體子類的實例-但那是兼容NumberFormat以同樣的方式,這種工作原理:

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

如果打印出NumberFormat.getInstance().getClass()您將看到正在使用哪個實際的具體子類-但您不應依賴於它返回任何特定的類; 關鍵是您只打算使用NumberFormat本身上指定的方法。

默認情況下, NumberFormat.getInstance()返回非抽象的DecimalFormat實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM