2013-02-19 41 views
0

Java文档说NumberFormat是一个抽象类。但下面这行代码让我感到困惑。在Java中使用抽象类

NumberFormat nf = NumberFormat.getInstance(); 

我们如何利用这个NumberFormat.getInstance()NumberFormat是一个抽象类? 任何人都可以帮助我理解这个请吗?

+0

'NumberFormat.getInstance'是一个静态方法。抽象类可以有静态方法。显然,这个返回'NumberFormat'的子类('NumberFormatImpl',也许?) – 2013-02-19 14:10:33

回答

2

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

6

NumberFormat.getInstance()static factory method,它可以返回抽象NumberFormat类的具体子类的实例:

这件事情是这样的:

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

class Guitar extends Instrument { } 

所以,当你拨打:

Instrument.getInstance(); 

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

0

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

2

您可以致电NumberFormat.getInstance()因为这是一种静态方法。你不需要一个类的实例来调用该类的静态方法。

NumberFormat.getInstance()可以声明的NumberFormat返回类型,因为它会实际上返回的具体子类的实例 - 但在同样的方式,这个作品是与NumberFormat兼容:

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

如果打印出来NumberFormat.getInstance().getClass()你会看到哪个实际具体子类正在使用 - 但你不应该依赖它返回任何特定的类;问题是你只是想使用NumberFormat本身指定的方法。