aanything's blog

プログラミング、雑多な情報を徒然なるままに。気に入ったまとめを保存してます。

Java Calendar? GregorianCalendar? 抽象クラス

たとえばこんなコードがあったとする

import java.util.*;

public class calendartest {
    public static void main(String[] args) {
        Calendar cl = new GregorianCalendar(); ーー①
        GregorianCalendar cl = new GregorianCalendar();  ーー②
        System.out.println(cl.getTime());
    }
}

①②どちらも実行可能なのだが
GregorianCalendar で定義されたメソッド、例えば isLeapYear(int) とかを使いたいなら
GregorianCalendar型の変数にしとかないと面倒くさい。


Calendarクラスは特殊で抽象クラスと呼ばれるもの。
インスタンス化するためには

Calendar today = Calendar.getInstance();

Calendar today = new Calendar();  //←できない

Calendarみたいな抽象クラスはそれ自身をインスタンス化しても意味が無い。
上記はCalendar classをもとに定義されたGregorianCalendarクラスのインスタンスを取得しているイメージ


また.getInstance()
はオブジェクト.メソッド ではなく クラス.メソッド という形(newしなくても使えるってこと)
static Calendarってなってるから

=====================================================
java api参照

getInstance

public static Calendar getInstance()
デフォルトのタイムゾーンおよびロケールを使用してカレンダを取得します。返された Calendar は、デフォルトロケールを持つデフォルトタイムゾーンの現在時刻に基づいています。
戻り値:
Calendar