黑马程序员技术交流社区

标题: calendat类 [打印本页]

作者: 逸盏清茶    时间: 2013-5-27 22:13
标题: calendat类
本帖最后由 逸盏清茶 于 2013-5-28 18:26 编辑

Calendar 类是一个抽象类,抽象类不是不能创建对象吗,为啥他的 getInstace()方法能返回一个本类的对象呢
作者: lpflpy    时间: 2013-5-27 22:28
嗯,抽象类是不能实例化。但是不代表没有实例,就像单例设计模式,它不让外界创建对象,但是他提供方法让外界直接获取一个对象。
抽象类同样可以像普通类一样调用他的静态方法,getInstance()就是Calendar的静态方法,得到实例对象。
这是源码,可以看出在方法内部创建了一个对象,用于方法返回。至于这个对象是怎么创建的,楼主可以看下源码。
  1.     public static Calendar getInstance()
  2.     {
  3.         Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT));
  4.         cal.sharedZone = true;
  5.         return cal;
  6.     }
复制代码

作者: Super_Class    时间: 2013-5-28 08:46
        |--特点:
                                |---方法只有声明没有实现,该方法就是抽象方法,需要用abstract修饰
          注-->注-->|---抽象类可以实例化。
                                |---抽象类必须有子类实现所有的抽象方法,该子类才可以实例化
                        |-- 抽象类中是有构造函数的。
                                        用于给子类对象初始化
                       
                        |--下后续关键字不可以和那些关键字共存
                                private //子类要覆盖抽象方法
                                static //静态不需要对象就可以使用。但是由于他没有方法体
                                final //很纠结。两个修饰符水火不容
                       
作者: 杨聂    时间: 2013-5-28 15:38
Calendar不能实例化是说它不能直接new一个Calendar对象,但是它是可以通过调用getInstace()静态方法来创建对象的。
作者: 逸盏清茶    时间: 2013-5-28 16:00
Calendar不能实例化是说它不能直接new一个Calendar对象,但是它是可以通过调用getInstace()静态方法来创建对象的。


那getInstace()方法内部怎么创建的对象呢,不还是得new吗?

作者: 逸盏清茶    时间: 2013-5-28 16:03
   |--特点:
                                |---方法只有声明没有实现,该方法就是抽象方法,需要用abstract修饰
          注-->注-->|---抽象类可以实例化。


抽象类怎么实例化呢
作者: Super_Class    时间: 2013-5-28 17:17
逸盏清茶 发表于 2013-5-28 16:03
抽象类怎么实例化呢

面向对象的多态性。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2