[英]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.