嗨,我知道Abstract類不能被實例化。但在Java API文檔here中,日曆類是一個Abstract類,並且有一個返回Calendar對象的靜態方法getInstance()
。如果抽象日曆對象無法實例化,那麼該方法如何返回Calendar對象?Abstract Calendar類的getInstance方法如何返回日曆對象
2
A
回答
4
Calendar.getInstance()
根據語言環境返回具體類GregorianCalendar
,BuddhistCalendar
或JapaneseImperialCalendar
之一的實例。每個類都是一個日曆,因爲它們都是抽象的Calendar
。就像這裏
abstract class A {
public static A getInstance() {
return new B();
}
}
class B extends A {
}
2
它返回一個類延伸日曆,在這種情況下java.util.GregorianCalendar中,其可以與
Calendar cal = Calendar.getInstance();
System.out.println(cal.getClass());
一個子類被檢查可以存儲在父類的變量內,即使父類不能直接實例化。
0
每種類型的日曆都有一個單例實例。
Calendar cal = Calendar.getInstance();
0
getInstance()
是一個自定義的方法,如果你看看jdk的來源,它返回GregorianCalendar
(或其他一些實施java.util.Calendar
類的)。
我覺得你困惑自己以爲getInstance()
是Reflection method?
因此,GregorianCalendar也是Calendar類型,因爲它擴展了GregorianCalendar。對? – 2013-04-27 05:36:02
是的,擴展一個類使它成爲原始類的孩子,所以它是一個GregorianCalendar以及一個Calendar。 http://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html – 2013-04-27 05:36:52
謝謝@Scott現在很清楚我 – 2013-04-27 05:41:20