Java (Polymorphismus)

Polymorphismus

"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

Zuweisen einer Instanz zu einem mehrdeutigen Typfeld

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

So rufen Sie den Assistenten gewaltsam an (niedergeschlagen)

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

Verarbeitung, die funktioniert, wenn eine Methode aufgerufen werden kann

** 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"

Downcast-Fehler (ClassCastException)

Character c = new Wizard();
Hero h = (Hero)c;                        

Kompiliert erfolgreich, schlägt jedoch beim Ausführen fehl Weil es eine "Lügenkomposition" ist

Bestimmen Sie, ob Sie sicher wirken können (Instanz des Operators)

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

[Java] Polymorphismus
Java (Polymorphismus)
Polymorphismus
Java (Verdienste des Polymorphismus)
Java
Java
Polymorphismus
Java lernen (0)
Java studieren ―― 3
[Java] -Array
Java geschützt
[Java] Anmerkung
[Java] Modul
Java studieren ―― 9
Java Scratch Scratch
Java-Tipps, Tipps
Java-Methoden
Java-Methode
Java (Konstruktor)
Java-Array
[Java] ArrayDeque
Java (überschreiben)
Java (Methode)
Java Day 2018
Java-Zeichenfolge
Java (Array)
Java statisch
Java-Serialisierung
Java Anfänger 4
JAVA hat bezahlt
Java studieren ―― 4
Java (gesetzt)
Java-Shell-Sortierung
[Java] compareTo
Java studieren -5
Java reflektierend 获 获 举
Java (Schnittstelle)
Java-Memorandum
Java-Array
Java studieren ―― 1
[Java] Array
Java # 0 studieren
Java-Überprüfung
Java-Framework
Java-Funktionen
[Java] Vererbung
FastScanner Java
Über Polymorphismus
Java-Funktionen
Java Anfänger 3
Java-Memo
Java (Kapselung)
[Java] Überladung
Java dekompilieren
[Java] Anmerkung
Java Note
Java (add2)
JAVA (Karte)
[Java] -Schnittstelle
Java9-Sammlung
Java-Grundlagen