抽象类NumberFormat-对getInstance()非常困惑
我是Java的新手,我有一个初学者的问题:
NumberFormat
是一个抽象类,因此我假设我无法创建它的实例。但是有一个公共静态(工厂?)方法getInstance()
可以让我做
NumberFormat nf = NumberFormat.getInstance();
我很困惑。如果有人可以给我提示,我将很高兴:
- 如果有一个公共方法获取此抽象类的实例,为什么我们也没有构造函数?
- 这是一个抽象类; 我们怎么有这个静态方法给我们一个类的实例?
- 为什么选择这样的设计?如果我假设有可能有一个抽象类的实例(???),那么我根本不知道为什么该类应该是抽象的。
谢谢。
回答:
- 该类是抽象的,因为它是Java中每种数字格式的基类(
DecimalFormat
例如,包括)。拥有一个本质上未知的数字格式的构造函数是毫无用处的。 - 该
getInstance()
方法是所谓的工厂方法。它返回当前语言环境的匹配数字格式。由于尚不知道在编译时需要哪种子类,因此它返回aNumberFormat
,但是 实例 本身显然是子类型的(因为您无法创建抽象类的实例)。 - 这种设计使您能够灵活 地以某种方式 确定适当的子类实例,以在运行时返回,而不必在设计/编译时使设计过于僵化。静态方法免于抽象,因此类可以作为工厂 和 抽象超类用于具体实现。如果不是这种情况,您可能会有一个
NumberFormatFactory
可以使用工厂方法的地方。
以上是 抽象类NumberFormat-对getInstance()非常困惑 的全部内容, 来源链接: utcz.com/qa/430535.html