- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下疑问。
进入我的代码:
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)型)我只能访问为此抽象类定义的方法子集,而不能访问为具体类型定义的所有方法。
这个推理正确还是我遗漏了什么?
最佳答案
这是polymorphism 。 Calendar
提供了一个抽象框架,像 GregorianCalendar 这样的子类提供了实现。在其他情况下,请理解 Calendar.getInstance()
可能会返回(例如)中国或希伯来日历,具体取决于位置和系统设置。
如果你真正想要的是GregorianCalendar
明确地声明变量。
GregorianCalendar cal = new GregorianCalendar();
关于java - 关于Java多态性应用于Calendar和GregoriaCalendar案例的一些疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39148614/
我是一名优秀的程序员,十分优秀!