Calendar.getInstance()方法既然返回一个GregorianCalendar类型的对象,为啥出现以下问题:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Calendar.getInstance()方法既然返回一个GregorianCalendar类型的对象,为啥出现以下问题:相关的知识,希望对你有一定的参考价值。

GregorianCalendar c1 = Calendar.getInstance();//解释错误语句
Calendar c1 = Calendar.getInstance();//正确语句

GregorianCalendar是Calendar的子类
GregorianCalendar c1 = Calendar.getInstance();返回的是一个Calendar,但你c1定义的又是GregorianCalendar ,所以会报错
可以写成
Calendar c1 = Calendar.getInstance();
或者
Calendar c1 =GregorianCalendar.getInstance();追问

返回的是GergorianCalendar的实例对象,可以向上转型,但GergorianCalendar c1为什么会出错。

参考技术A 很基础的问题,多翻下课本了

GregorianCalendar 是Calendar 的子类, 你能说儿子一定是父亲么?追问

GregorianCalendar c1 = GregorianCalendar.getInstance(); 为什么也不对呢

追答

GregorianCalendar.getInstance(); 调用的是父类getinstance方法,返回的是Calendar

Day027 Calendar类

Calendar日历类


  • Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能。
  • 获取Calendar实例的方法
    • 使用Calendar.getInstance()方法(调用Calendar的静态方法
    • 调用它的子类GregorianCalendar的构造器。(实例化继承Calendar的子类)
Calendar calendar=Calendar.getInstance();//实际上还是new的GregorianCalendar
System.out.println(calendar.getClass());

输出结果

class java.util.GregorianCalendar

注:可以看到,用getInstance()方法最终还是new的GregorianCalendar对象。


  • 一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND

    • public void set(int field,int value)
    • public void add(int field,int amount)
    • public final Date getTime()
    • public final void setTime(Date date)
  • 注意:

    • 获取月份时:一月是0,二月是1,以此类推,12月是11
    • 获取星期时:周日是1,周二是2,。。。。周六是7
    public static void main(String[] args) {
        //1.实例化
        Calendar calendar=Calendar.getInstance();//实际上还是new的GregorianCalendar
        System.out.println(calendar.getClass());

        //2.常用方法
        //get()
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set()
        calendar.set(Calendar.DAY_OF_MONTH,22);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //add()
        calendar.add(Calendar.DAY_OF_MONTH,3);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        calendar.add(Calendar.DAY_OF_MONTH,-1);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //getTime() 日历类--->Date对象
        Date date = calendar.getTime();
        System.out.println(date);

        //setTime() Date对象--->日历类
        Date date1 = new Date();
        calendar.setTime(date1);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    }

输出结果

class java.util.GregorianCalendar
27
147
22
25
24
Mon May 24 20:14:35 CST 2021
27

尚硅谷

以上是关于Calendar.getInstance()方法既然返回一个GregorianCalendar类型的对象,为啥出现以下问题:的主要内容,如果未能解决你的问题,请参考以下文章

java笔记Calendar.getInstance()是什么意思

Day027 Calendar类

Calendar.getInstance()获取当天指定点上的时间

日期和数字

Calendar和Date之间的转换;system.nanotime()方法;以及System.currentTimeMillis()方法 分别计算运行效率

Java的Calendar类