平时使用时都是Calendar c = Calendar.getInstance();
Calendar是一个抽象类,得到的是一个子类GregorianCalendar的对象,
在JAVA中会经常使用父类引用指向子类对象,为了是可以方便的替换成其它子类对象。
但是Calendar只有一个子类GregorianCalendar,为什么也要这么写呢,也不可能替换成其他子类啊?
Calendar是一个抽象类,得到的是一个子类GregorianCalendar的对象,
在JAVA中会经常使用父类引用指向子类对象,为了是可以方便的替换成其它子类对象。
但是Calendar只有一个子类GregorianCalendar,为什么也要这么写呢,也不可能替换成其他子类啊?
解决方案 »
- 关于售票系统的疑问?
- tomcat是web服务器还是应用服务器?
- struts2--->result type=plainText--->返回结果不是源码!!!为什么???
- ofbiz的优点 及实现原理
- struts2下面的ValueStack问题 新号没有分 还请多多帮忙
- 请教个XML小问题
- 号外 自学Struts应该准备什么 比如看什么书,看一些源代码。。。 谢谢指教!
- 请教一个问题,比较着急,请给与解答,谢谢
- 在Hibernate中,怎样做修改记录?请高手们帮手!!
- 寻找j2ee相关的中英文对照翻译文献,请help,多谢!
- 今天一面被恒生给刷了 来点散分(100)
- ehcache更新问题
getInstance()方法:public static Calendar getInstance()
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
}
那我们再看看createCalendar方法:private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
// If the specified locale is a Thai locale, returns a BuddhistCalendar
// instance.
if ("th".equals(aLocale.getLanguage())
&& ("TH".equals(aLocale.getCountry()))) {
return new sun.util.BuddhistCalendar(zone, aLocale);
} else if ("JP".equals(aLocale.getVariant())
&& "JP".equals(aLocale.getCountry())
&& "ja".equals(aLocale.getLanguage())) {
return new JapaneseImperialCalendar(zone, aLocale);
} // else create the default calendar
return new GregorianCalendar(zone, aLocale);
}可以看到 在jdk源码实现中 分别针对了泰国和日本产生了不同的日历对象sun.util.BuddhistCalendar 和JapaneseImperialCalendar,以及标准历法的GregorianCalendar。
BuddhistCalendar也是继承自GregorianCalendar.同样的道理,如果今后有其他的日期计算方法,不同于当前的格林威治时间,Calendar接口仍然可以使用,我们只需要扩展他实现一个类就行了,然后修改下getInstance 这个静态方法的实现就完了。