Java 文档说NumberFormat
是一个抽象类。但是以下代码行让我感到困惑。
NumberFormat nf = NumberFormat.getInstance();
当NumberFormat.getInstance()
是抽象类时,我们如何使用此NumberFormat
?
有人可以帮我理解这个吗?
答案 0 :(得分:6)
NumberFormat.getInstance()
是static factory method,它可以返回抽象NumberFormat
类的具体子类的实例:
这是这样的:
abstract class Instrument {
public static Instrument getInstance() {
return new Guitar();
}
}
class Guitar extends Instrument { }
所以,当你打电话:
Instrument.getInstance();
您将获得Guitar
的实例,这是一个具体的子类。
答案 1 :(得分:2)
getInstance()
方法返回NumberFormat的子类 - 您的语言环境的默认值。
答案 2 :(得分:2)
您可以调用 NumberFormat.getInstance()
,因为它是一种静态方法。您不需要类的实例来调用该类的静态方法。
NumberFormat.getInstance()
可以声明返回类型为NumberFormat
,因为它实际上会返回一个具体子类的实例 - 但是它同时与NumberFormat
兼容这样做的方式:
String x = "test";
Object y = x;
如果你打印出NumberFormat.getInstance().getClass()
,你会看到正在使用哪个实际的具体子类 - 但你不应该依赖它返回任何特定的类;关键是你只是想使用NumberFormat
本身指定的方法。
答案 3 :(得分:0)
NumberFormat.getInstance()
默认返回非抽象DecimalFormat
实现。