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.
Klasse Klassenname erweitert Der ursprüngliche Klassenname{
Mitglieder, die dem ursprünglichen Klassennamen hinzugefügt werden sollen
}
(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!");
}
}
"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
final
beim Erstellen einer Klasse können nicht vererbt werden.Schreiben Sie die Mitglieder der übergeordneten Klasse mit der untergeordneten Klasse neu. Zu diesem Zeitpunkt werden die Mitglieder der übergeordneten Klasse nicht neu geschrieben.
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!
Es kann verboten werden, indem der Methode, die das Überschreiben verbietet, "final" hinzugefügt wird.
Wenn Sie verhindern möchten, dass die Ausführungsmethode überschrieben wird.
public final void run
Die oben erstellte "SuperHero" -Instanz hat eine doppelte Struktur aus "Hero-Instanz" und "SuperHero" -Instanz.
(Bild)
Zum Zeitpunkt des Aufrufs funktioniert es so, dass es zuerst von den Mitgliedern der SuperHero-Instanz verwendet wird.
(Bild)
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.
Verwendung von Mitgliedern der übergeordneten Klasse in untergeordneten Instanzen
Feld ・ ・ ・ super. Feldname
Methode ・ ・ ・ super. Methodenname (Argument)
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);
}
Der Zugriff auf die Elternklasse (Großelternklasse) der Elternklasse ist nicht möglich.
Durch Vererbung erstellte Instanzen rufen immer den übergeordneten Konstruktor auf, bevor sie ihren eigenen Konstruktor aufrufen.
Name der untergeordneten Klasse(){
super(Streit);
}
Wenn jedoch nichts angegeben ist, wird ** implizites Super ** automatisch eingegeben.
(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
Wenn der übergeordnete Klassenkonstruktor ein Argument benötigt, müssen Sie explizit einen Wert in das Argument ** super (argument) ** eingeben.
Untergeordnete Klasse ist eine übergeordnete Klasse (untergeordnete Klasse ist eine Art übergeordnete Klasse) muss eingerichtet werden.
○ 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