我是Java新手,我有一个初学者问题:
NumberFormat
是一个抽象类,所以我假设我无法创建它的实例。但是有一个允许我做的公共静态(工厂?)方法getInstance()
NumberFormat nf = NumberFormat.getInstance();
我很困惑。如果有人能给我提示,我会很高兴:
谢谢。
答案 0 :(得分:8)
DecimalFormat
)。拥有一个基本未知数字格式的构造函数是没用的。getInstance()
方法是所谓的factory method。它返回当前语言环境的匹配数字格式。由于不知道在编译时需要什么类的子类,它返回NumberFormat
,但是,实例本身将是一个子类型,显然(因为你不能创建抽象类的实例。)NumberFormatFactory
工厂方法。答案 1 :(得分:8)
实际上你可以从
获得什么public static final NumberFormat getInstance()
是 ALSO a NumberFormat
,但它是它的子类的具体实例。
你不能以任何方式实例化一个抽象类,这样方法就不能返回一个普通的NumberFormat,而是至少一个NumberFormat
。在这种情况下,该方法用于获取您的语言环境的默认格式化程序,该格式化程序可能是DecimalFormat
或其某些变体
在DecimalFormat
的文档中指出:
获取a的NumberFormat 特定区域设置,包括默认值 locale,调用NumberFormat之一 工厂方法,如 的getInstance()。一般来说,不要打电话 DecimalFormat构造函数 直接,自NumberFormat 工厂方法可能会返回子类 除了DecimalFormat。
结束:你可以肯定,如果它是抽象的,那么你就无法实例化它,Java本身也不能......因为声明缺少某些部分所以它是一个真正不完整的类型。