Tworzenie obiektów w Javie

0

Zauważyłem, że np. klasa Calendar jest abstrakcyjna. Aby utworzyć jej obiekt, trzeba skorzystać z metody getInstance(). Skąd ten zwrócony obiekt pochodzi? Czy jest to obiekt GregorianCalendar?
Szczerze powiem, że trochę łatwo się w tym pogubić.
To samo z Dictionary, jest abstrakcyjna a widzę metodę newInstance() . Po tym dziedziczy Map, które znowu jest abstrakcyjne, po którym Hashmap lub Hashtable po Dictionary.

2

Calendar.getInstance() wywoluje:

    public static Calendar getInstance()   {
        Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
	cal.sharedZone = true;
	return cal;
    }

co z kolei wywoluje:

private static Calendar createCalendar(TimeZone zone,   Locale aLocale) {
	// If the specified locale is a Thai locale, returns a BuddhistCalendar
	// instance.
	if ("th".equals(aLocale.getLanguage())
	    && ("TH".equals(aLocale.getCountry()))) {
	    return new sun.util.BuddhistCalendar(zone, aLocale);
	} else if ("JP".equals(aLocale.getVariant())
		   && "JP".equals(aLocale.getCountry())
		   && "ja".equals(aLocale.getLanguage())) {
	    return new JapaneseImperialCalendar(zone, aLocale);
	}	    

	// else create the default calendar
        return new GregorianCalendar(zone, aLocale);	
    }

czyli jak nie jestes z Japoni albo z Tajlandi to otrzymasz instancje GregorianCalendar z powrotem. Dlaczego nie jest to singleton? odpowiedzi lezy jak na dloni.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.