Java文档说NumberFormat
是一个抽象类。但是下面的代码行让我很困惑。
NumberFormat nf = NumberFormat.getInstance();
NumberFormat.getInstance()
当NumberFormat
是抽象类时,我们如何使用它?任何人都可以帮助我理解这一点吗?
Java文档说NumberFormat
是一个抽象类。但是下面的代码行让我很困惑。
NumberFormat nf = NumberFormat.getInstance();
NumberFormat.getInstance()
当NumberFormat
是抽象类时,我们如何使用它?任何人都可以帮助我理解这一点吗?
NumberFormat.getInstance()
是一个静态工厂方法,它可以返回抽象NumberFormat
类的具体子类的实例:
是这样的:
abstract class Instrument {
public static Instrument getInstance() {
return new Guitar();
}
}
class Guitar extends Instrument { }
所以,当你打电话时:
Instrument.getInstance();
你会得到一个 的实例Guitar
,它是一个具体的子类。
您可以调用 NumberFormat.getInstance()
,因为它是静态方法。您不需要类的实例来调用该类的静态方法。
NumberFormat.getInstance()
可以声明一个返回类型,NumberFormat
因为它实际上会返回一个具体子类的实例——但这与它NumberFormat
的工作方式相同:
String x = "test";
Object y = x;
如果你打印出来,NumberFormat.getInstance().getClass()
你会看到正在使用哪个实际的具体子类——但你不应该依赖它返回任何特定的类;关键是你只是打算使用NumberFormat
自己指定的方法。
该getInstance()
方法返回 NumberFormat 的子类 - 您的语言环境的默认值。
NumberFormat.getInstance()
默认返回非抽象DecimalFormat
实现。