嗨,我知道抽象类无法实例化。但是在Java API文档here中,日历类是一个抽象类,并且有一个返回Calendar对象的静态getInstance()
方法。如果无法实例化抽象日历对象,那么此方法如何返回Calendar对象?
答案 0 :(得分:4)
Calendar.getInstance()
返回其中一个具体类GregorianCalendar
,BuddhistCalendar
或JapaneseImperialCalendar
的实例,具体取决于区域设置。每个类都是一个日历,因为它们都扩展了抽象Calendar
。就像在这里
abstract class A {
public static A getInstance() {
return new B();
}
}
class B extends A {
}
答案 1 :(得分:2)
它返回一个扩展Calendar的类,在本例中为java.util.GregorianCalendar,可以使用
进行检查Calendar cal = Calendar.getInstance();
System.out.println(cal.getClass());
子类可以存储在父类的变量中,即使父类不能直接实例化也是如此。
答案 2 :(得分:0)
每种类型的日历都有一个单例实例。
Calendar cal = Calendar.getInstance();
答案 3 :(得分:0)
getInstance()
是一种自定义方法,如果您查看jdk源代码,它将返回GregorianCalendar
(或java.util.Calendar
类的其他实现)。
我认为您认为getInstance()
是Reflection method?