[JAVA] Erbe

Grundlagen der Vererbung

Denkweise

Vererbung wird verwendet, um eine andere Klasse zu erstellen, die von einer Klasse abgeleitet ist. Zum Beispiel, wenn Sie bereits eine "Helden" -Klasse haben und eine daraus abgeleitete "Superhelden" -Klasse erstellen möchten.

wie benutzt man

Klasse Klassenname erweitert Der ursprüngliche Klassenname{
Mitglieder, die dem ursprünglichen Klassennamen hinzugefügt werden sollen
}

Beispiel

(Heldenklasse)

public class Hero {
	//Feld
	private String name;
	private int hp;
}

Wenn Sie diesem einen fliegenden Superhelden hinzufügen möchten ...

(Superheldenklasse)

public class SuperHero extends Hero{
	private boolean flying;

	public void fly() {
		this.flying = true;
		System.out.println("Ich bin aufgesprungen!");
	}

	public void land() {
		this.flying = false;
		System.out.println("Gelandet!");
	}
}

Wie man Vererbung ausdrückt

"Originalklasse" ・ ・ ・ Elternklasse, Superklasse "Klasse basierend auf der ursprünglichen Klasse erstellt" ... Untergeordnete Klasse, Unterklasse

Im obigen Code ist die Vererbungsbeziehung wie folgt. "Heldenklasse" ・ ・ ・ Elternklasse, Superklasse "Super Hero Klasse" ・ ・ ・ Kinderklasse, Unterklasse

Erbschaftsverbote

überschreiben

Denkweise

Schreiben Sie die Mitglieder der übergeordneten Klasse mit der untergeordneten Klasse neu. Zu diesem Zeitpunkt werden die Mitglieder der übergeordneten Klasse nicht neu geschrieben.

Beispiel

Wenn Sie die Ausführungsmethode neu schreiben möchten. (Elternklasse)

public class Hero {
	//Feld
	private String name;
	private int hp;

	public void run() {
		System.out.println("rannte weg!");
	}

(Kinderklasse)

public class SuperHero extends Hero{
	private boolean flying;

	public void run() {//Mitglieder umschreiben
		System.out.println("Zurückgezogen!");
	}
}

(Hauptklasse)


public static void main(String[] args) {
		//Held
		Hero hero1 = new Hero();
		hero1.run();

		//Superheld
		SuperHero shHero1 = new SuperHero();
		shHero1.run();
	}

(Ausgabeergebnis)

rannte weg!
Zurückgezogen!

So verbieten Sie das Überschreiben

Es kann verboten werden, indem der Methode, die das Überschreiben verbietet, "final" hinzugefügt wird.

Beispiel

Wenn Sie verhindern möchten, dass die Ausführungsmethode überschrieben wird. public final void run

Klassenstatus zum Zeitpunkt der Vererbung

Denkweise

Die oben erstellte "SuperHero" -Instanz hat eine doppelte Struktur aus "Hero-Instanz" und "SuperHero" -Instanz.

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

Verhalten zum Zeitpunkt des Anrufs

Zum Zeitpunkt des Aufrufs funktioniert es so, dass es zuerst von den Mitgliedern der SuperHero-Instanz verwendet wird.

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

In diesem Fall befindet sich die "Ausführungsmethode" in "SuperHero", daher wird sie aufgerufen. Da die Methode in ① gefunden wurde, wird der Aufruf in ② nicht ausgeführt.

So greifen Sie auf die übergeordnete Klasse zu

Denkweise

Verwendung von Mitgliedern der übergeordneten Klasse in untergeordneten Instanzen

wie benutzt man

Feld ・ ・ ・ super. Feldname Methode ・ ・ ・ super. Methodenname (Argument)

Beispiel

Bei der "Angriffsmethode" der "SuperHero-Klasse" greift es zweimal an, wenn es fliegt. Wenn Sie die "Angriffsmethode" der übergeordneten Klasse "Heldenklasse" verwenden möchten.

//Heldenklasse
	public void attack(Matango matango) {
		int matangoHp = matango.getHp() - 5;
		matango.setHp(matangoHp);
	}
//SuperHero Klasse
	public void attack(Matango matango) {
		super.attack(matango);
		if(this.flying) {
			super.attack(matango);
		}

wichtiger Punkt

Der Zugriff auf die Elternklasse (Großelternklasse) der Elternklasse ist nicht möglich.

Über Vererbung und Konstruktoren

Denkweise

Durch Vererbung erstellte Instanzen rufen immer den übergeordneten Konstruktor auf, bevor sie ihren eigenen Konstruktor aufrufen.

So rufen Sie den Konstruktor der übergeordneten Klasse auf

Name der untergeordneten Klasse(){
    super(Streit);
}

Wenn jedoch nichts angegeben ist, wird ** implizites Super ** automatisch eingegeben.

Beispiel

(Heldenklasse)

Hero(){
	System.out.println("Generierter Held");
}

(Superheldenklasse)

SuperHero(){
                //Implizites Super tritt hier ein
	System.out.println("Generierter Superheld");
}

(Hauptklasse)

SuperHero shHero1 = new SuperHero();

(Ausgabeergebnis) SuperHero wird nicht generiert, aber der Konstruktor von SuperHero wird aufgerufen.

Generierter Held
Generierter Superheld

Ergänzung

Wenn der übergeordnete Klassenkonstruktor ein Argument benötigt, müssen Sie explizit einen Wert in das Argument ** super (argument) ** eingeben.

Vorsichtsmaßnahmen für die Vererbung

ist-eine Beziehung

Untergeordnete Klasse ist eine übergeordnete Klasse (untergeordnete Klasse ist eine Art übergeordnete Klasse) muss eingerichtet werden.

Beispiel

○ Richtiges Beispiel: Kinderklasse (TV) - Elternklasse (Haushaltsgeräte) "TV ist ein Haushaltsgerät" → Ja × Falsches Beispiel: Kinderklasse (TV) - Elternklasse (Auto) "TV ist ein Auto" → Hält nicht

Recommended Posts

Erbe
Erbe
Über die Vererbung
[Java] Vererbung
Java-Vererbung
Java-Vererbung
Erweiterte Vererbung
Java (Vererbung)
[Java] Klassenvererbung
Informationen zur Klassenvererbung.
Informationen zur Ruby-Vererbung
Über Java-Vererbung
Vererbung und Schnittstelle.
[Java] Überladen / Überschreiben / Vererbung
Fassen Sie die Java-Vererbung zusammen (Java Silver 8)
Hinweise zur Mehrfachvererbung
Informationen zur Vererbung (Java Silver)
Ruby-Vererbung und -Delegierung
Über Kapselung und Vererbung
[Java] Implizites Vererbungsprotokoll
Java-Lernnotiz (Vererbung)