Java文档说NumberFormat
是一个抽象类。但下面这行代码让我感到困惑。在Java中使用抽象类
NumberFormat nf = NumberFormat.getInstance();
我们如何利用这个NumberFormat.getInstance()
时NumberFormat
是一个抽象类? 任何人都可以帮助我理解这个请吗?
Java文档说NumberFormat
是一个抽象类。但下面这行代码让我感到困惑。在Java中使用抽象类
NumberFormat nf = NumberFormat.getInstance();
我们如何利用这个NumberFormat.getInstance()
时NumberFormat
是一个抽象类? 任何人都可以帮助我理解这个请吗?
getInstance()
方法返回NumberFormat的子类 - 您的语言环境的默认值。
NumberFormat.getInstance()
是static factory method,它可以返回抽象NumberFormat
类的具体子类的实例:
这件事情是这样的:
abstract class Instrument {
public static Instrument getInstance() {
return new Guitar();
}
}
class Guitar extends Instrument { }
所以,当你拨打:
Instrument.getInstance();
你会得到一个Guitar
的实例,它是一个具体的子类。
NumberFormat.getInstance()
默认返回非抽象DecimalFormat
实现。
您可以致电NumberFormat.getInstance()
因为这是一种静态方法。你不需要一个类的实例来调用该类的静态方法。
NumberFormat.getInstance()
可以声明的NumberFormat
返回类型,因为它会实际上返回的具体子类的实例 - 但在同样的方式,这个作品是与NumberFormat
兼容:
String x = "test";
Object y = x;
如果打印出来NumberFormat.getInstance().getClass()
你会看到哪个实际具体子类正在使用 - 但你不应该依赖它返回任何特定的类;问题是你只是想使用NumberFormat
本身指定的方法。
'NumberFormat.getInstance'是一个静态方法。抽象类可以有静态方法。显然,这个返回'NumberFormat'的子类('NumberFormatImpl',也许?) – 2013-02-19 14:10:33