次の疑問があります。
私が持っている私のコードに:
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ではなく単純なCalendarとして定義されている場合は使用できません。
ポリモーフィズムについては知っていますが、この特定のケースではどのように機能しますか?
GregorianCalendarオブジェクトの参照 ( Calendar.getInstance()によって返される、それは本当ですか?) をCalendarに入れると思います ( Calendarはスーパー タイプであるため、実行できます)。これに対して定義されたメソッド サブセットにのみアクセスできます。具象型に対して定義されたすべてのメソッドではなく、抽象クラス。
この推論は正しいですか、それとも何か不足していますか?