--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.
--Inherited class = Beim Erstellen einer neuen Klasse eine Klasse, die dieselben Teile wie die zuvor erstellte Funktion erbt
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
}
}
--Constructor = Eine Methode, die beim Erstellen einer Instanz einer Klasse immer automatisch aufgerufen wird.
Smple.java
class Sample{
public Sample(){
//Hier ist der Konstruktor
}
public void exampleMethod(){
//Dies ist nur eine Klassenmethode
}
}
--Wenn eine Klasse instanziiert wird, wird sie in der Reihenfolge vom oberen Rand der Vererbungshierarchie bis zum unteren Rand instanziiert.
●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
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!
--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);
}
}
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.