抽象类NumberFormat-对getInstance()非常困惑

我是Java的新手,我有一个初学者的问题:

NumberFormat是一个抽象类,因此我假设我无法创建它的实例。但是有一个公共静态(工厂?)方法getInstance()可以让我做

NumberFormat nf = NumberFormat.getInstance();

我很困惑。如果有人可以给我提示,我将很高兴:

  1. 如果有一个公共方法获取此抽象类的实例,为什么我们也没有构造函数?
  2. 这是一个抽象类; 我们怎么有这个静态方法给我们一个类的实例?
  3. 为什么选择这样的设计?如果我假设有可能有一个抽象类的实例(???),那么我根本不知道为什么该类应该是抽象的。

谢谢。

回答:

  1. 该类是抽象的,因为它是Java中每种数字格式的基类(DecimalFormat例如,包括)。拥有一个本质上未知的数字格式的构造函数是毫无用处的。
  2. getInstance()方法是所谓的工厂方法。它返回当前语言环境的匹配数字格式。由于尚不知道在编译时需要哪种子类,因此它返回a NumberFormat,但是 实例 本身显然是子类型的(因为您无法创建抽象类的实例)。
  3. 这种设计使您能够灵活 地以某种方式 确定适当的子类实例,以在运行时返回,而不必在设计/编译时使设计过于僵化。静态方法免于抽象,因此类可以作为工厂 抽象超类用于具体实现。如果不是这种情况,您可能会有一个NumberFormatFactory可以使用工厂方法的地方。

以上是 抽象类NumberFormat-对getInstance()非常困惑 的全部内容, 来源链接: utcz.com/qa/430535.html

回到顶部