I'm new to Java and I have a beginner question:
NumberFormat
is an abstract class and so I assume I can't make an instance of it. But there is a public static (factory?) method getInstance()
that allow me to do
NumberFormat nf = NumberFormat.getInstance();
I'm quite confuse. I'll be glad if someone could give me hints on:
- If there is a public method to get an instance of this abstract class, why don't we have also a constructor?
- This is an abstract class ; how can we have this static method giving us an instance of the class?
- Why choosing such a design? If I assume it's possible to have an instance of an abstract class (???), I don't get why this class should be abstract at all.
Thank you.
DecimalFormat
, for example). Having a constructor for an essentially unknown number format is pretty useless.getInstance()
method is a so-called factory method. It returns a matching number format for the current locale. Since it is not known what kind of sub-class is required at compile-time, it returns aNumberFormat
, however, the instance itself, will be of a sub-type, obviously (since you can't create instances of abstract classes).NumberFormatFactory
somewhere which would have the factory methods.Actually what you can obtain from
is something that is ALSO a
NumberFormat
, but it is a concrete instance of a subclass of it.You can't in anyway instantiate an abstract class so that method can't return a plain NumberFormat but something that is at least a
NumberFormat
. In this case the method is used to obtain a default formatter for your locale that will probably be aDecimalFormat
or some variations of itIn the documentation of
DecimalFormat
it states:To end: you can be sure, if it's abstract, then you cannot instantiate it, neither Java itself can.. since the declaration is missing some parts so it's a real incomplete type.