Java ist eine stark typisierte Sprache.
Standardkonvertierungen und automatische Werbeaktionen werden auf primitive Typen angewendet.
Typkompatibilität wird strikt erzwungen.
Normalerweise kann eine Referenzvariable einer Klasse nicht auf ein Objekt einer anderen Klasse verweisen.
Auch wenn die Klassen X und Y strukturell gleich sind, ist es nicht möglich, einem Objekt von Y eine Referenz von X zuzuweisen, da die Typen unterschiedlich sind.
Im Allgemeinen kann eine Objektreferenzvariable nur auf Objekte ihres Typs verweisen.
Die Ausnahme von der Typauferlegung besteht darin, dass die Referenzvariable einer Oberklasse auf Objekte jeder Unterklasse verweisen kann, die von dieser Oberklasse abgeleitet ist.
Da Y von X abgeleitet ist, darf x2 eine Referenz auf ein Objekt von Y empfangen.
Der Typ der Referenzvariablen, nicht der Typ des Objekts, auf das sie verweist, bestimmt die Mitglieder, auf die zugegriffen werden kann.
Wenn eine Referenz auf ein Unterklassenobjekt einer Oberklassenvariablen zugewiesen wird, ist es nur möglich, auf die von der Oberklasse definierten Mitglieder zuzugreifen.
Im Beispiel kann x2 nicht auf Mitglied b von Y zugreifen, da Klasse X die von der Unterklasse hinzugefügten Mitglieder nicht kennt.
Variablen der Oberklasse zugewiesene Unterklassenverweise kommen häufig vor, insbesondere beim Aufruf von Konstruktoren in Klassenhierarchien.
Unterklassen können von Konstruktoren profitieren, die ein Objekt aus der Oberklasse als Parameter übernehmen und so die Erstellung von Kopien von Objekten ermöglichen.
In diesem Programm wird t2 aus t1 aufgebaut und ist daher identisch.
Achtung in diesem Dreieck-Builder:
// Konstruiert ein Objekt aus einem anderen.
Dreieck(Dreieck ob) {
super(ob); // übergibt das Objekt an den Konstruktor von TwoDShape
style = ob.style;
}
Es empfängt ein Objekt vom Typ Dreieck und übergibt es (über Super) an diesen TwoDShape-Konstruktor:
//Konstruiert ein Objekt aus einem anderen.
TwoDShape(TwoDShape ob) {
width = ob.width;
height = ob.height;
}
Der TwoDShape()-Konstruktor erwartet den Empfang eines Objekts vom Typ TwoDShape.
Der Konstruktor der Triangle()-Unterklasse übergibt ihr ein Objekt vom Typ Triangle.
Dies funktioniert, weil eine Referenz aus einer Oberklasse wie TwoDShape auf ein Objekt aus einer Unterklasse wie Triangle verweisen kann.
Es ist akzeptabel, eine Referenz von einem Objekt einer abgeleiteten Klasse an einen Konstruktor der Oberklasse zu übergeben.
Der Superklassenkonstruktor TwoDShape() initialisiert nur Mitglieder, die zur TwoDShape-Klasse gehören, unabhängig von zusätzlichen Mitgliedern der Triangle-Unterklasse.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3