In Computer-Programmierung, bezieht typecasting der Einnahme ein Objekt eines Typs und dessen Umwandlung in ein Objekt eines anderen Typs . In Java 6 , dies in der Regel , aber nicht immer , geht entweder Upcasting oder Downcasting , die ein Objekt geworfen oben oder unten die Vererbungshierarchie bedeutet . Anleitung
1
Fügen Sie die folgenden Java-Klassen in eine leere Textdatei . Dies sind die Klasse, die für das Tutorial verwendet werden :
public class Person { }
public class malePerson erstreckt Person {}
2
Fügen Sie den folgenden upcast :
Person p = new malePerson ( "Tom" );
malePerson Klasse ist eine Unterklasse von Person, so ist dies eine Besetzung in der Hierarchie . Upcasting ist die einfachste Art von Besetzung abziehen . Java weiß einfach, was zu tun ist , wenn eine Unterklasse einer seiner Vorfahren zugeordnet ist. Machen Sie eine mentale Notiz , aber: Java wird immer daran erinnern, was ein Objekt ist wirklich während einer upcast . Selbst jetzt, dass die malePerson "Tom" hat zu einer generischen Objekt Person zugewiesen wurde, erinnert sich an Java , dass diese Aufgabe ist wirklich ein malePerson
3
Fügen Sie den folgenden niedergeschlagen : .
< P > Person p = new malePerson ( "Tom" );
malePerson m = ( malePerson ) p;
Typumwandlungen wie diese, die sich bewegen in der Hierarchie , der Programmierer benötigen , um die Klasse angeben ist für die Besetzung in Klammern verwendet . Allerdings ist Downcasting komplexer als Upcasting
4
Versuch folgende niedergeschlagen :
Person p = new Person ( "Jane" );
malePerson m = . ( malePerson ) p;
Dieser Versuch schlägt fehl, und es sollte nicht schwer zu sehen warum. Während es vernünftig ist anzunehmen, dass ein malePerson eine Person ist, ist es nicht angemessen für den Computer, um anzunehmen, dass alle Personen MalePersons sind . Ein paar kann FemalePersons sein, und der Unterschied kann sein oder auch nicht trivial für die Computer- Zwecke . Nur um sicher zu sein, wirft das Programm einen Fehler.
Niedergeschlagenen kann nur auftreten, wenn ein upcast hat zuerst aufgetreten , weshalb die upcast in Schritt 3 gültig war , aber nicht in Schritt 4 . Dies kann Upcasting Sound nutzlos auf den ersten. Es stellt sich die Frage, warum die upcast wurde in erster Linie durchgeführt , aber halten diesen Gedanken
5
Betrachten Sie das folgende Verfahren : .
Public void grüßen ( Person p) {
if ( p instanceof malePerson ) {
malePerson m = ( malePerson ) p;
m.doMaleThings (); }
else if (p instanceof femalePerson ) {
femalePerson f = ( malePerson ) p;
f.doFemaleThings (); } else
throw new GenderConfusionException (); }
der Verfasser dieser Methode hat keine Möglichkeit, im Voraus zu wissen , ob diese Methode mit einem malePerson oder femalePerson Objekt aufgerufen wird , so nutzt er die generischen Person-Objekt . Dann nutzt er die instanceof Befehl, um die Person gegeben abfragen und sehen , ob er niedergeschlagen es als Mann oder einer weiblichen Person .