1

Java文档说NumberFormat是一个抽象类。但是下面的代码行让我很困惑。

 NumberFormat nf = NumberFormat.getInstance();

NumberFormat.getInstance()NumberFormat是抽象类时,我们如何使用它?任何人都可以帮助我理解这一点吗?

4

4 回答 4

6

NumberFormat.getInstance()是一个静态工厂方法,它可以返回抽象NumberFormat类的具体子类的实例:

是这样的:

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

class Guitar extends Instrument { }

所以,当你打电话时:

Instrument.getInstance();

你会得到一个 的实例Guitar,它是一个具体的子类。

于 2013-02-19T13:54:06.823 回答
2

您可以调用 NumberFormat.getInstance(),因为它是静态方法。您不需要类的实例来调用该类的静态方法。

NumberFormat.getInstance()可以声明一个返回类型,NumberFormat因为它实际上会返回一个具体子类的实例——但这与它NumberFormat的工作方式相同:

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

如果你打印出来,NumberFormat.getInstance().getClass()你会看到正在使用哪个实际的具体子类——但你不应该依赖它返回任何特定的类;关键是你只是打算使用NumberFormat自己指定的方法。

于 2013-02-19T13:56:59.620 回答
2

getInstance()方法返回 NumberFormat 的子类 - 您的语言环境的默认值。

于 2013-02-19T13:53:45.070 回答
0

NumberFormat.getInstance()默认返回非抽象DecimalFormat实现。

于 2013-02-19T13:54:25.413 回答