A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 逸盏清茶 中级黑马   /  2013-5-27 22:13  /  1484 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 逸盏清茶 于 2013-5-28 18:26 编辑

Calendar 类是一个抽象类,抽象类不是不能创建对象吗,为啥他的 getInstace()方法能返回一个本类的对象呢

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
嗯,抽象类是不能实例化。但是不代表没有实例,就像单例设计模式,它不让外界创建对象,但是他提供方法让外界直接获取一个对象。
抽象类同样可以像普通类一样调用他的静态方法,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.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 辛苦了 女女

查看全部评分

回复 使用道具 举报
        |--特点:
                                |---方法只有声明没有实现,该方法就是抽象方法,需要用abstract修饰
          注-->注-->|---抽象类可以实例化。
                                |---抽象类必须有子类实现所有的抽象方法,该子类才可以实例化
                        |-- 抽象类中是有构造函数的。
                                        用于给子类对象初始化
                       
                        |--下后续关键字不可以和那些关键字共存
                                private //子类要覆盖抽象方法
                                static //静态不需要对象就可以使用。但是由于他没有方法体
                                final //很纠结。两个修饰符水火不容
                       

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
Calendar不能实例化是说它不能直接new一个Calendar对象,但是它是可以通过调用getInstace()静态方法来创建对象的。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
Calendar不能实例化是说它不能直接new一个Calendar对象,但是它是可以通过调用getInstace()静态方法来创建对象的。


那getInstace()方法内部怎么创建的对象呢,不还是得new吗?
回复 使用道具 举报
   |--特点:
                                |---方法只有声明没有实现,该方法就是抽象方法,需要用abstract修饰
          注-->注-->|---抽象类可以实例化。


抽象类怎么实例化呢
回复 使用道具 举报
逸盏清茶 发表于 2013-5-28 16:03
抽象类怎么实例化呢

面向对象的多态性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马