我自己的理解是,抽象类不能实例化一个对象。
那么下面这个应该怎么理解呢
Calendar calendar=Calendar.getInstance();//创建一个日期对象
我看了帮助文档 帮助文档里说Calendar是一个抽象类。大家帮我解释一下吧 ~~~ 先感谢大家!!!
那么下面这个应该怎么理解呢
Calendar calendar=Calendar.getInstance();//创建一个日期对象
我看了帮助文档 帮助文档里说Calendar是一个抽象类。大家帮我解释一下吧 ~~~ 先感谢大家!!!
抽象类是可以实例化一个类的,谁说不可以实例化实例的???不要想当能
直接google JAVA 抽象类是否可以实例化 大把的答案
再说这些书上肯定有。。
所以不能 new Calendar()getInstance是一个静态函数,返回的是一个实现了Calendar里面各个abstract函数的类。
根据TimeZone和TimeZone不同,getInstance会返回,JapaneseImperialCalendar或者GregorianCalendar,或者sun.util.BuddhistCalendar
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);
}你看看 return new GregorianCalendar(zone, aLocale);
它返回了一个GregorianCalendar的实例。
但是查看GregorianCalendar的定义是:
public class GregorianCalendar extends Calendar所以 它实际返回的是这个抽象类的实现类的实例哦,用到了多态.类似的还有DateFormat等 呵呵
但抽象类可以实例化一个子类!Calendar calendar=Calendar.getInstance();//这个表示单例模式