hilft abstrakte Klassen zu verstehen: java calendar method getInstance ()

7

Ich habe Probleme, das Konzept hinter abstrakten Klassen zu verstehen. Die Definition, die ich lese, ist, dass sie mindestens eine Methode haben, die deklariert wird, aber keine Implementierung hat, daher kann die Klasse nicht instanziiert werden. Die Java-Kalenderklasse ist abstrakt und kann nicht mit dem Operator New instanziiert werden. Es gibt jedoch eine Methode namens getInstance (), die ein Kalenderobjekt zurückgibt. Wie funktioniert das?

%Vor%     
tmakino 10.02.2011, 18:26
quelle

5 Antworten

16

Abstrakte Klassen haben keine abstrakten Methoden. So wird es normalerweise gemacht.

Jetzt arbeitet Calendar.getInstance() nach tatsächlich , um eine Instanz einer Unterklasse zu erstellen. Sie dürfen es aufrufen, weil es sich um eine statische Methode handelt. Der Rückgabewert bezieht sich auf eine Instanz der relevanten Unterklasse, aber der Rückgabetyp ist nur Calendar , was aufgrund der normalen Regeln der Vererbung gut ist.

Hier ist ein Beispiel für die gleiche Vorgehensweise, aber ohne die Komplexität von Calendar gelten die gleichen Prinzipien:

%Vor%     
Jon Skeet 10.02.2011, 18:29
quelle
2

Da Calendar eine abstrakte Klasse ist, können Sie keine neue Instanz wie diese erstellen. Wenn Sie sich das Dokument ansehen, finden Sie eine beliebige Methode mit static Calendar ist darauf aufgelistet und du wirst getInstance() finden, also kannst du so etwas tun: -

%Vor%

Wenn Sie sich das gleiche Dokument erneut ansehen, sehen Sie sich Direct Known Subclasses oben auf der Seite an. Die hier aufgeführten Klassen sind die Implementierung von Calendar ... in diesem Fall können Sie also verwenden GregorianCalendar , auch so: -

%Vor%

Beides funktioniert ...

    
limc 10.02.2011 18:31
quelle
1

Es gibt einen Gregorianischen Kalender zurück.

Siehe Ссылка

    
hvgotcodes 10.02.2011 18:29
quelle
1

Eine abstrakte Klasse kann statische Methoden implementieren.

getInstance () ist eine statische Methode, die eine standardmäßige konkrete Implementierung der abstrakten Klasse zurückgibt.

In diesem Fall glaube ich, dass es tatsächlich eine GregorianCalendar-Instanz zurückgibt.

    
Phil Hayward 10.02.2011 18:30
quelle
1

Die Methode getInstance () der Calendar-Klasse gibt kein Objekt der Calendar-Klasse zurück, stattdessen gibt sie einen Kalender mit der "Standardzeitzone und Gebietsschema" in meinem Fall einen GregorianCalendar zurück, der eine Unterklasse von Calendar ist. :)

    
jhurtado 10.02.2011 18:32
quelle

Tags und Links