[Java] Konstruktoren für Superklassen / Unterklassen

Inhaltsverzeichnis

--Einführung

Einführung

Ich bin ein junger Ingenieur. Ich musste die Fortsetzung des Codes schreiben, den eine Person geschrieben hatte, als ich neulich in der Firma codierte. Zu dieser Zeit blieb ich in der Klassenvererbung, dem Konstruktor </ b> stecken und verbrachte viel Zeit ... Als ich von Anfang an wieder lernte, fand ich etwas, das ich nicht verstand, und es war unangenehm, also beschloss ich, es noch einmal zusammenzufassen.

Darüber hinaus dieser Artikel ・ "Personen, die derzeit Java berühren" ・ "Personen, die den Inhalt erneut überprüfen möchten" Es ist für. Bitte lesen Sie jeden Klassennamen / Variablennamen entsprechend.

Vorausgesetztes Wissen

Über geerbte Klassen

--Inherited class = Beim Erstellen einer neuen Klasse eine Klasse, die dieselben Teile wie die zuvor erstellte Funktion erbt

  • Die geerbte Klasse heißt "Elternklasse" und die geerbte Klasse heißt "Kindklasse". ―― Ähnlich wie "Superklasse" oder "Unterklasse" genannt
  • In diesem Artikel wird es als super / sub ausgedrückt.
  • Sie können auf die Methoden / Felder der geerbten Klasse zugreifen, indem Sie eine Instanz der geerbten Klasse erstellen.
  • ↓↓↓↓ Wie man schreibt ist ↓↓↓↓

Super.java


class Super {
  public void exampleSuper(){
    //Einige Verarbeitung
  }
}

Sub.java


class Sub extends Super(){ //Der Klassenname erweitert Inherit um den Namen der Vererbungsquellklasse.
  public void exampleSub(){
    //Einige Verarbeitung
  }
}

Konstrukteur

--Constructor = Eine Methode, die beim Erstellen einer Instanz einer Klasse immer automatisch aufgerufen wird.

  • Eine Methode mit demselben Namen wie der Klassenname
  • Normalerweise beginnt der Konstruktorname aus dem oben genannten Grund mit einem Großbuchstaben.
  • Da der Rückgabewert ursprünglich nicht erwartet wurde, schreiben Sie nicht void (→ Kompilierungsfehler)
  • Wird hauptsächlich zum Initialisieren von Feldern (Mitgliedsvariablen) dieser Klasse verwendet. ―― Stattdessen ist es wie üblich / implizit besser, nichts anderes zu tun.
    → Verbessert die Lesbarkeit / Wartbarkeit in der groß angelegten Entwicklung
  • ↓↓↓↓ Wie man schreibt ist ↓↓↓↓

Smple.java


class Sample{
  public Sample(){
    //Hier ist der Konstruktor
  }
  public void exampleMethod(){
    //Dies ist nur eine Klassenmethode
  }
}

Diesmal

Implizite Konstruktorausführung

--Wenn eine Klasse instanziiert wird, wird sie in der Reihenfolge vom oberen Rand der Vererbungshierarchie bis zum unteren Rand instanziiert.

  • Der Unterklassenkonstruktor ruft zuerst den Oberklassenkonstruktor auf
  • Wenn Sie den Superklassenkonstruktor nicht explizit aufrufen, wird der Konstruktor ohne Argumente automatisch aufgerufen.
  • Die Methode super () </ b> wird implizit (automatisch) ausgeführt, wenn der Konstruktor aufgerufen wird.

●super();

Eine Methode, die den Konstruktor einer Oberklasse aufruft. Unterklassenkonstruktoren führen implizit (automatisch) Superklassenkonstruktoren "als Sprachimplementierung" aus Es ist nicht immer notwendig zu beschreiben

  • ↓↓↓↓ Spezifisches Beispiel ↓↓↓↓

Super.java


class Super {
	Super() {
		System.out.println("Super Klasse!");
	}
}

Sub.java


class Sub extends Super {
	Sub() {
		//Führt implizit einen Superklassenkonstruktor aus
		System.out.println("Es ist eine Unterklasse!");
	}
}

Main.java


class Main {
	public static void main(String[] args) {
		Sub obj = new Sub();
}

//Ausführungsergebnis
Es ist eine super Klasse!
Es ist eine Unterklasse!

"Impliziter Superkonstruktor ist undefiniert"

--Wenn der Konstruktor der Superklasse nur mit Argumenten definiert ist, verursacht die implizit ausgeführte Methode "super ();" allein einen Kompilierungsfehler.

▽ Lösung ① Erstellen Sie einen Konstruktor, der keine Argumente in der Superklasse enthält

Super.java


class Super {
    public name;
    public Super(){
        //Überladen Sie den Konstruktor
    }
    public Super(String name){
        this.name = name;
    }
}

(2) Rufen Sie im Unterklassenkonstruktor den Oberklassenkonstruktor explizit mit der super (); -Methode auf, die dem Argument des Oberklassenkonstruktors entspricht.

Super.java


class Sub {
    public name;
    public Super(String name){
        //Maine->sub->Legen Sie den Wert der übergebenen Namensvariablen in der Reihenfolge super im Feld fest
        this.name = name;
    }
}

Sub.java


class Sub extends Super {
    Sub(String name) {
    //Entspricht dem Variablennamen der Hauptklasse Strin->An den Superklassenkonstruktor übergeben
    super(name);
    }
}

Main.java


class Main {
	public static void main(String[] args) {
		Sub obj = new Sub(String name);
	}
}

Am Ende

Es ist wieder lange her, aber danke fürs Lesen. Das nächste Mal denke ich, ich sollte mich mit der Ausnahmebehandlung mit Try-Catch befassen. Dann.

Recommended Posts