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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许冉 黑马帝   /  2011-10-12 20:55  /  3546 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

许冉 黑马帝 2011-10-13 01:20:45
楼主
赵玉成 发表于 2011-10-12 23:39
Calendar的构造方法都为protected,表示继承了Calendar且实现了抽象方法的子类可以使用,
Calendar.getInst ...

soga 文档中修饰符字太小了,一般都没注意,呵呵
回复 使用道具 举报
本帖最后由 xuan 于 2011-10-12 22:29 编辑

第二次看视频的时候,看到Calendar的时候
才发现Calendar是个抽象类
只能用getInstance()方法获得的是一个子类实例
但是API文档中,这个类是有构造函数的
既然不能创建抽象类的实例,那么对外提供构造方法有什么用


评分

参与人数 1技术分 +1 黑马币 +4 收起 理由
wangfayin + 1 + 4 赞一个!

查看全部评分

8 个回复

倒序浏览
楼主我不确定是否正确的理解了你的意思,Calendar这是一个时间类,由于它跟商业中用到的逻辑有关系所以才比较重要,您是问这个类怎么用还是别的什么呢,至于抽象类的问题,这个。。。抽象类当然也可以有构造方法啊,你可能是把抽象类理解成了接口,?呵呵,
回复 使用道具 举报
本帖最后由 伍碧林 于 2011-10-13 09:06 编辑

java抽象类的构造方法和普通类的构造方法一样
都是用来初始化类
只是抽象类的构造方法不能直接调用 因为抽象类不能实现实例
但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数
也可以使用其方法
确实可以用Calendar 的静态方法getInstance()返回一个以Calendar为父类的实例,也就是你说的子类实例,但是也可以用它的子类.
Calendar temp = Calendar.getInstance();//方式一
Calendar temp1= new GregorianCalendar();//方式二
你用静态方法返回的是一个以Calendar为父类的实例,也就是你说的子类实例,肯定作为子类会比父类多很多方法的.
补充一句:没有构造方法的类是不存在的

评分

参与人数 1技术分 +2 黑马币 +8 收起 理由
wangfayin + 2 + 8 赞一个!

查看全部评分

回复 使用道具 举报
许冉 黑马帝 2011-10-12 22:26:13
报纸
伍碧林 发表于 2011-10-12 22:02
java抽象类的构造方法和普通类的构造方法一样
都是用来初始化类
只是抽象类的构造方法不能直接调用 因为抽 ...

getInstance()方法返回的是Calendar类的实例吗
不会吧,抽象类怎么可以有实例呢
回复 使用道具 举报
许冉 黑马帝 2011-10-12 22:27:31
地板
庞金梁 发表于 2011-10-12 21:38
楼主我不确定是否正确的理解了你的意思,Calendar这是一个时间类,由于它跟商业中用到的逻辑有关系所以才比 ...

我是说
抽象类既然不能创建实例
那么对外提供构造方法有什么用呢
回复 使用道具 举报
庞金梁 黑马帝 2011-10-12 22:34:53
7#
抽象类虽然不能实例,但是可以继承啊,继承给子类用啊。。。

评分

参与人数 1黑马币 +2 收起 理由
许冉 + 2 貌似只能让子类使用了,就当抽取子类构造方.

查看全部评分

回复 使用道具 举报
伍碧林 黑马帝 2011-10-12 22:41:37
8#
本帖最后由 伍碧林 于 2011-10-12 22:45 编辑
xuan 发表于 2011-10-12 22:26
getInstance()方法返回的是Calendar类的实例吗
不会吧,抽象类怎么可以有实例呢 ...


文档是这样的."static Calendar getInstance() "
应该这样这么理解吧.返回的是以Calendar为父类的实例,也就是你说的子类实例
确实我的说法有问题;我还这样试了试
   System.out.println(Calendar.getInstance());
结果:java.util.GregorianCalendar[time=1318430270484,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=9,WEEK_OF_YEAR=42,WEEK_OF_MONTH=3,DAY_OF_MONTH=12,DAY_OF_YEAR=285,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,MINUTE=37,SECOND=50,MILLISECOND=484,ZONE_OFFSET=28800000,DST_OFFSET=0]
回复 使用道具 举报
赵玉成 黑马帝 2011-10-12 23:39:02
9#
Calendar的构造方法都为protected,表示继承了Calendar且实现了抽象方法的子类可以使用,
Calendar.getInstance()返回的其实就是GregorianCalendar的一个实例,看源码:
public static Calendar getInstance()
    {
        Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
        cal.sharedZone = true;
        return cal;
    }
private static Calendar createCalendar(TimeZone zone,Locale aLocale)
    {                    
        …………………………………………………………
         // else create the default calendar
        return new GregorianCalendar(zone, aLocale);       
    }

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
许冉 + 2
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马