[JAVA] Héritage

Bases de l'héritage

Façon de penser

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.

comment utiliser

class nom de classe étend Le nom de classe d'origine{
Membres à ajouter au nom de classe d'origine
}

Exemple

(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!");
	}
}

Comment exprimer l'héritage

"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

Interdictions d'héritage

-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.

passer outre

Façon de penser

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.

Exemple

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é!

Comment interdire le remplacement

Cela peut être interdit en ajoutant final à la méthode qui interdit le remplacement.

Exemple

Si vous souhaitez éviter de remplacer la méthode d'exécution. public final void run

État de la classe au moment de l'héritage

Façon de penser

L'instance SuperHero créée ci-dessus a une double structure de instance Hero et d'instance SuperHero.

(Image) スクリーンショット 2018-02-26 10.37.12.png

Comportement au moment de l'appel

Au moment de l'appel, il fonctionne de manière à être utilisé en premier par les membres de l'instance SuperHero.

(Image) スクリーンショット 2018-02-26 10.42.45.png

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 accéder à la classe parent

Façon de penser

Comment utiliser les membres de la classe parent dans les instances enfants

comment utiliser

Champ ・ ・ ・ super. Nom du champ Méthode ・ ・ ・ super. Nom de la méthode (argument)

Exemple

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);
		}

point important

L'accès à la classe parent (classe grand-parent) de la classe parent n'est pas possible.

À propos de l'héritage et des constructeurs

Façon de penser

Les instances créées par héritage appellent toujours le constructeur parent avant d'appeler leur propre constructeur.

Comment appeler le constructeur de la classe parent

Nom de classe enfant(){
    super(argument);
}

Cependant, si rien n'est indiqué, ** super implicite ** sera entré automatiquement.

Exemple

(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é

Supplément

Si le constructeur de la classe parent requiert un argument, vous devez explicitement entrer une valeur dans l'argument ** super (argument) **.

Précautions d'héritage

est-une relation

La classe enfant est une classe parent (la classe enfant est une sorte de classe parent) doit être établie.

Exemple

○ 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

Héritage
Héritage
À propos de l'héritage
[Java] Héritage
Héritage Java
Héritage Java
Héritage avancé
java (héritage)
[Java] Héritage de classe
À propos de l'héritage de classe.
À propos de l'héritage Ruby
À propos de l'héritage Java
Héritage et interface.
[Java] Surcharge / Remplacer / Héritage
Résumer l'héritage Java (Java Silver 8)
Remarques sur l'héritage multiple
À propos de l'héritage (Java Silver)
Héritage et délégation Ruby
À propos de l'encapsulation et de l'héritage
[Java] Mémo d'héritage implicite
Mémo d'apprentissage Java (héritage)