java (polymorphisme)

Polymorphisme

"Capturez l'instance vaguement" Si la relation est-une est établie par héritage, l'instance peut être affectée à une variable du type de classe parent.

SuperHero h = new SuperHero();

Instance de super héros ordinaire

Character c = new SuperHero();

En supposant que la classe parente de la classe SuperHero a Character

Assigner une instance à une zone de type ambigu

public class Main {
  public static void main(String[] args) {
    Wizard w = new Wizard();
    Character c = w;             //Mettre dans une zone de type de caractère
    Matango m = new Matango();
    c.name = "sorcier";
    c.attack(m);                 //Peut être appelé
    c.fireball(m);               //Obtenez une erreur
  }
}

・ Oubliez que le contenu de la boîte (Caractère c) est Wizard ・ Seule l'attaque () peut être appelée car d'autres personnages ont une attaque. (En supposant que chaque personnage a une attaque ()) -Fireball () n'a pas pu être appelé car un autre personnage n'a pas de boule de feu () (car il ne l'a pas forcément) et une erreur se produit. ・ Je peux dire avec certitude que la boîte ne contient qu'un seul type de caractère

Comment appeler de force Wizard (downcast)

Character c = new Wizard();
Wizard w = c;                   //Obtenez une erreur

Étant donné que le programme est interprété et traduit ligne par ligne, c sur la deuxième ligne ne peut pas être déterminé comme Assistant.

Character c = new Wizard();
Wizard w = (Wizard)c;           //Instruire la conversion de type forcée

Traitement qui fonctionne lorsqu'une méthode peut être appelée

** La classe Slime (enfant) hérite de la classe Monster (parent) ** Monster System.out.println ("Monstre s'est échappé."); Slime System.out.println ("Slime s'est échappé.");

public class Main {
  public static void main(String[] args) { 
    Slime s = new Slime();
    Monster m = new Slime();
    s.run();
    m.run();
  }
}

** Résultat d'exécution ** Le slime s'est échappé à la suite de s.run () Le slime s'est échappé à la suite de m.run () Le résultat réel dépend du type de contenu (Slime ()), le type de boîte (Monster m) n'est pas lié au résultat

Échec du downcast (ClassCastException)

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

Compile avec succès, mais échoue lors de l'exécution Parce que c'est une "composition mensongère"

Déterminez si vous pouvez lancer en toute sécurité (opérateur instanceof)

if(c instanceof Wizard) {  //Si le contenu de c peut être considéré comme Wizard
Wizard w = (Wizard)c;      //Pensez-y comme un sorcier
w.fly();
}                       

Recommended Posts

[Java] Polymorphisme
java (polymorphisme)
Polymorphisme
java (mérites du polymorphisme)
Java
Java
Polymorphisme
Apprendre Java (0)
Étudier Java ―― 3
[Java] tableau
Java protégé
[Java] Annotation
Module [Java]
Étudier Java ―― 9
Java scratch scratch
Astuces Java, astuces
Méthodes Java
Méthode Java
java (constructeur)
Tableau Java
[Java] ArrayDeque
java (remplacement)
java (méthode)
Journée Java 2018
Chaîne Java
java (tableau)
Java statique
Sérialisation Java
java débutant 4
JAVA payé
Étudier Java ―― 4
Java (ensemble)
tri shell java
[Java] compareTo
Étudier Java -5
java réfléchissant 获 获 举
java (interface)
Mémorandum Java
Tableau Java
Étudier Java ―― 1
[Java] Array
Étudier Java # 0
Revue Java
framework java
Fonctionnalités Java
[Java] Héritage
FastScanner Java
À propos du polymorphisme
Fonctionnalités Java
java débutant 3
Mémo Java
java (encapsulation)
[Java] Surcharge
Décompiler Java
[Java] Annotation
note java
Java (add2)
JAVA (Carte)
interface [java]
Collection Java9
Les bases de Java