3

嗨我知道抽象类不能被实例化。但是在这里的Java API 文档中,日历类是一个抽象类,并且有一个getInstance()返回日历对象的静态方法。如果抽象日历对象不能被实例化,那么这个方法如何返回一个日历对象呢?

4

4 回答 4

4

Calendar.getInstance()返回具体类之一的实例GregorianCalendarBuddhistCalendarJapaneseImperialCalendar取决于语言环境。这些类中的每一个都是一个 Calendar 因为它们都扩展了 abstract Calendar。就像这里

abstract class A {
    public static A getInstance() {
          return new B();
    }
}

class B extends A {
}
于 2013-04-27T05:34:03.340 回答
2

它返回一个扩展 Calendar 的类,在本例中为 java.util.GregorianCalendar,可以使用

Calendar cal = Calendar.getInstance();
System.out.println(cal.getClass());

子类可以存储在父类的变量中,即使父类不能直接实例化。

于 2013-04-27T05:31:54.010 回答
0

每种类型的日历都有一个单例实例。

Calendar cal = Calendar.getInstance();
于 2013-04-27T05:32:50.617 回答
0

getInstance()是一个自定义方法,如果您查看 jdk 源代码,它正在返回GregorianCalendar(或其他java.util.Calendar类的实现)。

我想你把自己弄糊涂了,以为那getInstance()反射法

于 2013-04-27T05:33:46.680 回答