在Java中使用抽象类

时间:2013-02-19 13:51:13

标签: java abstract-class number-formatting

Java 文档说NumberFormat是一个抽象类。但是以下代码行让我感到困惑。

 NumberFormat nf = NumberFormat.getInstance();

NumberFormat.getInstance()是抽象类时,我们如何使用此NumberFormat? 有人可以帮我理解这个吗?

4 个答案:

答案 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实现。