"Erfassen Sie die Instanz vage" Wenn die is-a-Beziehung durch Vererbung hergestellt wird, kann die Instanz einer Variablen des übergeordneten Klassentyps zugewiesen werden.
SuperHero h = new SuperHero();
Regelmäßige Super Hero-Instanz
Character c = new SuperHero();
Angenommen, die übergeordnete Klasse der SuperHero-Klasse hat Character
public class Main {
public static void main(String[] args) {
Wizard w = new Wizard();
Character c = w; //Geben Sie ein Feld für den Zeichentyp ein
Matango m = new Matango();
c.name = "Magier";
c.attack(m); //Kann angerufen werden
c.fireball(m); //Erhalten Sie einen Fehler
}
}
・ Vergessen Sie, dass der Inhalt der Box (Zeichen c) Assistent ist
・ Nur attack () kann aufgerufen werden, da andere Charaktere angegriffen haben.
(Vorausgesetzt, jeder Charakter hat einen Angriff ())
・ Fireball () konnte nicht aufgerufen werden, da andere Charaktere keinen Fireball () haben (weil sie ihn nicht immer haben) und ein Fehler auftritt.
・ Ich kann mit Sicherheit sagen, dass die Box nur einen Zeichentyp enthält
Character c = new Wizard();
Wizard w = c; //Erhalten Sie einen Fehler
Da das Programm zeilenweise interpretiert und übersetzt wird, kann c in der zweiten Zeile nicht als Assistent festgelegt werden.
Character c = new Wizard();
Wizard w = (Wizard)c; //Weisen Sie die erzwungene Typkonvertierung an
** Die Slime (Kind) Klasse erbt die Monster (Eltern) Klasse ** Monster System.out.println ("Monster entkommen."); Slime System.out.println ("Slime ist entkommen.");
public class Main {
public static void main(String[] args) {
Slime s = new Slime();
Monster m = new Slime();
s.run();
m.run();
}
}
** Ausführungsergebnis ** Der Schleim entkam infolge von s.run () Der Schleim entkam infolge von m.run () Das tatsächliche Ergebnis hängt von der Art des Inhalts ab (Slime ()), die Art der Box (Monster m) ist "nicht mit dem Ergebnis verbunden"
Character c = new Wizard();
Hero h = (Hero)c;
Kompiliert erfolgreich, schlägt jedoch beim Ausführen fehl Weil es eine "Lügenkomposition" ist
if(c instanceof Wizard) { //Wenn der Inhalt von c als Assistent angesehen werden kann
Wizard w = (Wizard)c; //Betrachten Sie es als einen Zauberer
w.fly();
}
Recommended Posts