gpt4 book ai didi

java - 关于Java多态性应用于Calendar和GregoriaCalendar案例的一些疑问

转载 作者:行者123 更新时间:2023-11-30 02:49:32 24 4
gpt4 key购买 nike

我有以下疑问。

进入我的代码:

Calendar today = Calendar.getInstance();

其中 Today 变量是 Calendar 的实例,因此我无法在其上使用 isLeapYear() 等方法。

这样做我可以执行这个方法:

GregorianCalendar today = (GregorianCalendar) Calendar.getInstance();
int currentYear = today.get(Calendar.YEAR);

boolean bisestile = today.isLeapYear(currentYear);

我的疑问是:到底为什么?我将 Calendar.getInstance() 返回的相同结果实例转换为 GregorianCalendar

在这里阅读:http://tutorials.jenkov.com/java-date-time/java-util-calendar.html

在我看来,java.util.Calendar类是抽象,所以我无法实例化它,所以我认为Calendar.getInstance( ) 自动返回一个定义了之前的 isLeapYear() 方法的 GregorianCalendar 对象。

但如果该对象被定义为简单的日历而不是GregorianCalendar,我就无法使用它。

我了解多态性,但在这种特定情况下到底是如何工作的?

我认为将 GregorianCalendar 对象的引用(由 Calendar.getInstance() 返回,是真的吗?)放入 Calendar 中> (我可以这样做,因为 Calendar 是父类(super class)型)我只能访问为此抽象类定义的方法子集,而不能访问为具体类型定义的所有方法。

这个推理正确还是我遗漏了什么?

最佳答案

这是polymorphismCalendar提供了一个抽象框架,像 GregorianCalendar 这样的子类提供了实现。在其他情况下,请理解 Calendar.getInstance() 可能会返回(例如)中国或希伯来日历,具体取决于位置和系统设置。

如果你真正想要的是GregorianCalendar明确地声明变量。

GregorianCalendar cal = new GregorianCalendar();

关于java - 关于Java多态性应用于Calendar和GregoriaCalendar案例的一些疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39148614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com