我自己的理解是,抽象类不能实例化一个对象。 
那么下面这个应该怎么理解呢
Calendar calendar=Calendar.getInstance();//创建一个日期对象
我看了帮助文档   帮助文档里说Calendar是一个抽象类。大家帮我解释一下吧 ~~~    先感谢大家!!!

解决方案 »

  1.   

    .... 看来你还得多看一下书。。
            抽象类是可以实例化一个类的,谁说不可以实例化实例的???不要想当能
    直接google  JAVA 抽象类是否可以实例化  大把的答案
    再说这些书上肯定有。。  
      

  2.   

    你理解的是对的。抽象类不能实例化一个对象。
    所以不能 new Calendar()getInstance是一个静态函数,返回的是一个实现了Calendar里面各个abstract函数的类。
    根据TimeZone和TimeZone不同,getInstance会返回,JapaneseImperialCalendar或者GregorianCalendar,或者sun.util.BuddhistCalendar
      

  3.   

    因为getInstance是个Static方法啊看下jdk的源码:
    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等 呵呵
      

  4.   


    但抽象类可以实例化一个子类!Calendar calendar=Calendar.getInstance();//这个表示单例模式