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