我有以下疑问。
在我的代码中,我有:
Calendar today = Calendar.getInstance();
今天变量是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对象。
但是,如果对象被定义为简单的Calendar而不是GregorianCalendar,我将无法使用它。
我知道多态性,但在这种特定情况下究竟是如何工作的?
我认为将GregorianCalendar对象的引用(由Calendar.getInstance()返回,是真的吗?)放入Calendar(我可以这样做,因为Calendar是超类型)我只能访问为此定义的方法子集抽象类,而不是为具体类型定义的所有方法。
这个推理是正确的还是我错过了什么?