Run-Time Type Identification (RTTI) ist ein sehr nützlicher Mechanismus in Java, der klassenbezogene Informationen verwaltet, wenn Java ausgeführt wird.
Polymorphismus wird basierend auf RTTI implementiert. Die Funktionen von RTTI werden hauptsächlich von der Class-Klasse implementiert.
Klasse Klasse
Klasse Klasse ist „Klasse von Klassen“ (Klasse von Klassen). Wenn eine Klasse eine Abstraktion und Sammlung von Objekten ist, dann ist die Class-Klasse eine Abstraktion und Sammlung von Klassen.
Jedes Klassenobjekt repräsentiert eine andere Klasse. Im folgenden Programm repräsentiert beispielsweise das Objekt c1 der Class-Klasse die Human-Klasse und c2 die Woman-Klasse.
Kopieren Sie den Codecode wie folgt:
Öffentlicher Klassentest
{
public static void main(String[] args)
{
Human aPerson = new Human();
Klasse c1 = aPerson.getClass();
System.out.println(c1.getName());
Human anotherPerson = new Woman();
Klasse c2 = anotherPerson.getClass();
System.out.println(c2.getName());
}
}
KlasseMensch
{
/**
*Accessor
*/
public int getHeight()
{
return this.height;
}
/**
* Mutator
*/
öffentliche Leere wachsenHöhe(int h)
{
this.height = this.height + h;
}
private int-Höhe;
}
Klasse Frau erweitert Mensch
{
/**
* neue Methode
*/
public Human GiveBirth()
{
System.out.println("Gebären");
return (new Human());
}
}
Wenn wir die Methode getClass() des Objekts aufrufen, erhalten wir eine Referenz auf das entsprechende Class-Objekt.
Selbst wenn wir in c2 die Referenz des Women-Objekts in die Referenz des Human-Objekts hochkonvertieren, ist das Klassenobjekt, auf das das Objekt zeigt, immer noch Woman.
Jedes Objekt in Java hat ein entsprechendes Klassenobjekt. Daher können wir jederzeit über das Klassenobjekt wissen, zu welcher Klasse ein Objekt „wirklich“ gehört. Unabhängig davon, welche Typkonvertierung wir für die Referenz durchführen, ist das dem Objekt selbst entsprechende Klassenobjekt dasselbe. Wenn wir eine Methode über eine Referenz aufrufen, kann Java immer die in der richtigen Class-Klasse definierte Methode finden und den Code in der Class-Klasse ausführen. Aufgrund der Existenz von Klassenobjekten geht Java nicht durch Typ-Upcasting verloren. Dies ist das Prinzip des Polymorphismus.
getClass: Wer bin ich?
Neben der getClass()-Methode haben wir noch andere Möglichkeiten, Objekte der Class-Klasse aufzurufen.
Kopieren Sie den Codecode wie folgt:
Öffentlicher Klassentest
{
public static void main(String[] args)
{
Klasse c3 = Class.forName("Human");
System.out.println(c1.getName());
Klasse c4 = Frau.Klasse
System.out.println(c2.getName());
}
}
Es gibt zwei oben gezeigte Möglichkeiten:
1. Die Methode forName() empfängt als Parameter einen String, der den Namen der Klasse darstellt. Dadurch wird das entsprechende Klassenobjekt zurückgegeben.
2. Die Woman.class-Methode ruft direkt das Klassenmitglied der Klasse auf. Dadurch wird das entsprechende Klassenobjekt zurückgegeben.
Klassenmethode
Das Class-Objekt zeichnet die Informationen der entsprechenden Klasse auf, z. B. den Namen der Klasse, das Paket, in dem sich die Klasse befindet usw. Wir können die entsprechende Methode aufrufen, wie zum Beispiel:
Kopieren Sie den Codecode wie folgt:
getName() gibt den Namen der Klasse zurück
getPackage() gibt das Paket zurück, in dem sich die Klasse befindet
Sie können die newInstance()-Methode des Class-Objekts verwenden, um Objekte der entsprechenden Klasse zu erstellen, wie zum Beispiel:
Kopieren Sie den Codecode wie folgt:
Human newPerson = c1.newInstance();
newInstance() ruft die Standard-Build-Methode ohne Parameter auf.
Wir können die Mitglieder der Klassendefinition erhalten:
Kopieren Sie den Codecode wie folgt:
getFields() gibt alle öffentlichen Datenelemente zurück
getMethods() gibt alle öffentlichen Methoden zurück
Reflexionsanalyseklassen können weiter verwendet werden. Hier keine weiteren Details.
Weitere Methoden der Class-Klasse finden Sie in der offiziellen Dokumentation:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
Laden der Klassenklasse
Wenn Java ein Objekt einer bestimmten Klasse erstellt, beispielsweise ein Objekt der Klasse Human, prüft Java, ob sich im Speicher ein entsprechendes Klassenobjekt befindet.
Wenn im Speicher kein entsprechendes Class-Objekt vorhanden ist, sucht Java in der .class-Datei nach der Definition der Human-Klasse und lädt das Class-Objekt der Human-Klasse.
Nachdem das Klassenobjekt erfolgreich geladen wurde, beziehen sich die Erstellung und verwandte Vorgänge anderer menschlicher Objekte auf das Klassenobjekt.