问答详情
源自:3-7 Calendar 类的应用

Calendar是一个抽象类,为什么还能通过getInstance()获得实例化的对象

抽象类不是不可以实例化的么?

提问者:qq_我虽很帅请别崇拜_03215448 2016-07-09 09:32

个回答

  • 慕沐0432748
    2017-04-18 17:03:12

    首先,抽象类可以有具体的实现方法。其次,看下源码:

    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);

    该方法内部最终返回的是具体的实现类,也就是子类,而不是你所理解的Calendar本身实例化的类。

    2016年10月09日回答

     

    3 评论

     

    编辑




  • 慕粉3484621
    2016-07-23 11:01:46

    静态抽象类

  • 乐乐8888
    2016-07-09 10:01:37

    getInstance()方法中返回的是createCalendar()方法,在这个createCalendar()方法中通过多态new了Calendar的子类,创建了对象。