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%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:
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: -
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: -
Beides funktioniert ...
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.
Tags und Links java