getInstance()获取的是一个Calendar的实例了, 估计是Calendar的某个实现吧,看看JDK的源代码应该可以了解

解决方案 »

  1.   

    感谢楼上的朋友,,我是从其它语言转过来的,在DELPHI语言中,抽象类是不允许进行实例化的,我不知道JAVA中这个规矩是怎么回事,还向其它朋友请教了。
      

  2.   

    在Java中抽象类不能用构造函数来实例化,但可以用一些方法来返回一个实例.
    如Calendar是一个抽象类,不能用new Calendar()来得到一个实例,
    但可以用Calendar的getInstance()方法来得到Calendar的实例.
      

  3.   

    JAVA也一样,抽象类不能用构造函数来实例化,但可获得
      

  4.   

    java.util.Calendar类的源码(1.4)
    getInstance()方法调用了Canlendar类的一个私有的静态方法createCalendar,
    private static Calendar createCalendar(TimeZone zone,Locale aLocale){
      if (aLocale.getLanguage().compareTo("th") == 0) {
        if (aLocale.getCountry().compareTo("TH") == 0) {
           return new sun.util.BuddhistCalendar(zone, aLocale);
        }
        // else create the default calendar
        return new GregorianCalendar(zone, aLocale);
      }
    }
    可以看到在这个方法中new了一个sun.util.BuddhistCalendar或者是一个java.util.GregorianCalendar。所以抽象类Calendar没有被实例化,返回的是它的某个子类的实例。这应当是个FACTORY METHOD模式,给出接口,而封装了子类的实现
      

  5.   

    bradwoo8621() 说得对了。getInstance通常是sun提供的实现方法。
      

  6.   

    java.util.Calendar类的源码(1.4)
    getInstance()方法调用了Canlendar类的一个私有的静态方法createCalendar,
    private static Calendar createCalendar(TimeZone zone,Locale aLocale){
      if (aLocale.getLanguage().compareTo("th") == 0) {
        if (aLocale.getCountry().compareTo("TH") == 0) {
           return new sun.util.BuddhistCalendar(zone, aLocale);
        }
        // else create the default calendar
        return new GregorianCalendar(zone, aLocale);
      }
    }
    可以看到在这个方法中new了一个sun.util.BuddhistCalendar或者是一个java.util.GregorianCalendar。所以抽象类Calendar没有被实例化,返回的是它的某个子类的实例。这应当是个FACTORY METHOD模式,给出接口,而封装了子类的实现