In Java wird die erzwungene Typkonvertierung in zwei Typen unterteilt: Basisdatentyp und Referenzdatentyp. Letzteres diskutieren wir hier über die erzwungene Typkonvertierung des Referenzdatentyps.
In Java können Unterklassen aufgrund von Vererbung und Aufwärtstransformation ganz natürlich in übergeordnete Klassen konvertiert werden, die Konvertierung von übergeordneten Klassen in Unterklassen erfordert jedoch eine erzwungene Konvertierung. Da die Unterklasse mehr Attribute und stärkere Funktionen als die übergeordnete Klasse hat, erfordert die Konvertierung von der übergeordneten Klasse in die Unterklasse Gewalt. Wird es also erfolgreich sein, solange die übergeordnete Klasse in eine Unterklasse konvertiert wird? Tatsächlich ist dies nicht der Fall. Die erzwungene Typkonvertierung zwischen ihnen ist bedingt.
Wenn wir ein Objekt mit einem Typkonstruktor erstellen, ist der Typ des Objekts bereits bestimmt, was bedeutet, dass sich sein Wesen nicht noch einmal ändert. In Java können wir den übergeordneten Klassentyp verwenden, um ihn durch Vererbung und Aufwärtstransformation zu referenzieren. Zu diesem Zeitpunkt verwenden wir einen schwächeren Typ, um auf ein stärkeres Objekt zu verweisen, was machbar ist. Aber wenn man einen schwächeren Typ zu einem stärkeren Objekt zwingt, funktioniert es möglicherweise nicht.
Geben Sie ein Beispiel zur Veranschaulichung. Beispielsweise gibt es im System zwei Objekte, Vater und Sohn. Zuerst erstellen wir ein Son-Objekt und referenzieren es dann mit einer Variablen vom Typ „Vater“:
Father father = new Son();
Hier wird die Son-Objektinstanz in den Vater umgewandelt, aber achten Sie bitte auf die Art dieser Son-Objektinstanz im Speicher Es ist immer noch ein Sohntyp, aber seine Fähigkeit wurde vorübergehend geschwächt. Was ist, wenn wir stärker werden wollen? Stellen Sie den Objekttyp wieder her!
Son son = (Son)father;
Diese Aussage ist zwar machbar, aber ihre Fähigkeiten werden gestärkt und auf die Sohnreferenz, das Sohnobjekt, übertragen . Die Instanz wird von der Sohnvariablen referenziert, stellt ihre wahre Form wieder her und kann alle Funktionen verwenden.
Wie bereits erwähnt, ist das Erzwingen einer übergeordneten Klasse in eine Unterklasse nicht immer erfolgreich. Unter welchen Umständen schlägt es also fehl?
Wenn die wahre Identität des Referenztyps der Typ der übergeordneten Klasse selbst ist, führt eine erzwungene Typkonvertierung zu einem Fehler. Beispiel:
Father father = new Father(); Son son = (Son) father;
Dieses System löst ClassCastException-Ausnahmeinformationen aus.
Der Compiler prüft also nur zur Kompilierungszeit, ob eine Vererbungsbeziehung zwischen Typen besteht. Wenn dies der Fall ist, überprüft er den wahren Typ wirft eine ClassCastException aus.
Bei der Vererbung kann sich eine Unterklasse also automatisch in eine übergeordnete Klasse umwandeln. Wenn die übergeordnete Klasse jedoch in eine Unterklasse gezwungen wird, ist die erzwungene Konvertierung nur dann erfolgreich, wenn die wahre Identität des Referenztyps die Unterklasse ist, andernfalls es wird scheitern.
Das Obige ist der Inhalt des Java-Verbesserungskapitels (10) ----- erzwungene Typkonvertierung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!