L'héritage est utilisé pour créer une autre classe qui dérive d'une classe. Par exemple, si vous avez déjà une classe "héros" et que vous souhaitez créer une classe "super-héros" qui en dérive.
class nom de classe étend Le nom de classe d'origine{
Membres à ajouter au nom de classe d'origine
}
(Classe de héros)
public class Hero {
//champ
private String name;
private int hp;
}
Si vous voulez ajouter un super-héros volant à cela ...
(Classe de super héros)
public class SuperHero extends Hero{
private boolean flying;
public void fly() {
this.flying = true;
System.out.println("J'ai sauté!");
}
public void land() {
this.flying = false;
System.out.println("A atterri!");
}
}
"Classe originale" ・ ・ ・ Classe parent, super classe "Classe créée à partir de la classe d'origine" ... Classe enfant, sous-classe
Dans le code ci-dessus, la relation d'héritage est la suivante. "Classe de héros" ・ ・ ・ Classe parent, super classe "Classe Super Héros" ・ ・ ・ Classe enfant, sous-classe
-Plusieurs classes parentes ne peuvent pas être héritées (héritage multiple) au moment de l'héritage.
-Les classes avec final
lors de la création d'une classe ne peuvent pas être héritées.
Réécrivez les membres de la classe parent avec la classe enfant. À ce stade, les membres de la classe parent ne sont pas réécrits.
Si vous souhaitez réécrire la méthode d'exécution. (Classe parente)
public class Hero {
//champ
private String name;
private int hp;
public void run() {
System.out.println("s'est enfui!");
}
(Classe enfant)
public class SuperHero extends Hero{
private boolean flying;
public void run() {//Membres à réécrire
System.out.println("Retiré!");
}
}
(Classe principale)
public static void main(String[] args) {
//héros
Hero hero1 = new Hero();
hero1.run();
//Super héros
SuperHero shHero1 = new SuperHero();
shHero1.run();
}
(Résultat de sortie)
s'est enfui!
Retiré!
Cela peut être interdit en ajoutant final
à la méthode qui interdit le remplacement.
Si vous souhaitez éviter de remplacer la méthode d'exécution.
public final void run
L'instance SuperHero
créée ci-dessus a une double structure de instance Hero
et d'instance SuperHero
.
(Image)
Au moment de l'appel, il fonctionne de manière à être utilisé en premier par les membres de l'instance SuperHero.
(Image)
Dans ce cas, la méthode run
est dans'SuperHero`, elle sera donc appelée.
Ensuite, puisque la méthode a été trouvée dans ①, l'appel dans ② n'est pas exécuté.
Comment utiliser les membres de la classe parent dans les instances enfants
Champ ・ ・ ・ super. Nom du champ
Méthode ・ ・ ・ super. Nom de la méthode (argument)
Dans la «classe SuperHero», la «méthode d'attaque», si elle vole, elle attaque deux fois. Si vous souhaitez utiliser la «méthode d'attaque» de la classe parente «Classe de héros».
//Classe de héros
public void attack(Matango matango) {
int matangoHp = matango.getHp() - 5;
matango.setHp(matangoHp);
}
//Classe SuperHero
public void attack(Matango matango) {
super.attack(matango);
if(this.flying) {
super.attack(matango);
}
L'accès à la classe parent (classe grand-parent) de la classe parent n'est pas possible.
Les instances créées par héritage appellent toujours le constructeur parent avant d'appeler leur propre constructeur.
Nom de classe enfant(){
super(argument);
}
Cependant, si rien n'est indiqué, ** super implicite ** sera entré automatiquement.
(Classe de héros)
Hero(){
System.out.println("Héros généré");
}
(Classe de super héros)
SuperHero(){
//Super implicite entre ici
System.out.println("Super héros généré");
}
(classe principale)
SuperHero shHero1 = new SuperHero();
(Résultat de sortie) SuperHero n'est pas généré, mais le constructeur de SuperHero est appelé.
Héros généré
Super héros généré
Si le constructeur de la classe parent requiert un argument, vous devez explicitement entrer une valeur dans l'argument ** super (argument) **.
La classe enfant est une classe parent (la classe enfant est une sorte de classe parent) doit être établie.
○ Exemple correct: Classe enfant (TV) - Classe parent (appareils ménagers) "La télévision est un appareil ménager" → Oui × Exemple incorrect: Classe enfant (TV) - Classe parent (automobile) "La télévision est une voiture" → Ne tient pas
Recommended Posts