calendar.getInstance() - 它如何返回对象

cja*_*ava 3 java calendar

Oracle这里的文档说

日历类是一个抽象类。

同一个文档还说

Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已用当前日期和时间初始化: Calendar

rightNow = Calendar.getInstance();

经过stackoverflow这篇文章的讨论后,我明白我们不能创建抽象类的对象。要创建抽象类的对象,我们必须实现它的具体子类。

有人可以帮助我理解(或指出一些参考资料)为什么我们可以创建 Calendar 类的对象,即使该类本身是一个抽象类?
或者
我遗漏了一些关于抽象类的非常重要的点

Lou*_*man 6

getInstance()在内部创建隐藏在某处的某个子类的对象。(如果你在它的实现中向下搜索,它最终会创建子类的实例,GregorianCalendar并将其作为 a 返回Calendar。)

像这样的静态工厂方法允许 APICalendar在内部选择如何创建实例——是创建一个子类实例,还是为整个类缓存一个实例,或者其他什么。这是一个很好的设计实践。