黑马程序员技术交流社区

标题: Calendar的实例对象 [打印本页]

作者: 许冉    时间: 2011-10-12 20:55
标题: Calendar的实例对象
本帖最后由 xuan 于 2011-10-12 22:29 编辑

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



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

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

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

我是说
抽象类既然不能创建实例
那么对外提供构造方法有什么用呢
作者: 庞金梁    时间: 2011-10-12 22:34
抽象类虽然不能实例,但是可以继承啊,继承给子类用啊。。。
作者: 伍碧林    时间: 2011-10-12 22:41
本帖最后由 伍碧林 于 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
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);       
    }
作者: 许冉    时间: 2011-10-13 01:20
赵玉成 发表于 2011-10-12 23:39
Calendar的构造方法都为protected,表示继承了Calendar且实现了抽象方法的子类可以使用,
Calendar.getInst ...

soga 文档中修饰符字太小了,一般都没注意,呵呵




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