Ich lerne Java (und OOP) und kann nicht verstehen, warum meine Klassen sich nicht so verhalten, wie ich es erwarte. Ich habe eine Oberklasse 'MyFirstJavaClass' und eine Unterklasse 'Test', die MyFirstJavaClass erweitert. MyFirstJavaClass verfügt über drei Mitgliedsvariablen mit öffentlichem Zugriff. Das sind int x, y und z. Der einzige Konstruktor in MyFirstJavaClass benötigt drei Argumente, um seine Membervariablen zu initialisieren. Die Unterklasse Test implementiert auch einen Konstruktor, der drei Argumente zur Initialisierung seiner geerbten Elemente (x, y und z) und eine von ihm definierte interne Variable (int spezifisch) verwendet. Hier ist der Code:Warum werden alle Anweisungen im Superklassenkonstruktor nicht ausgeführt?
MyFirstJavaClass:
class MyFirstJavaClass {
int x, y, z;
MyFirstJavaClass(int a, int b, int c) {
System.out.println("Hey! I am the superclass constructor");
x = a;
y = b;
z = c;
}
public static void main(String args[]) {
Test t = new Test(12, 25, 37);
}
}
Test:
class Test extends MyFirstJavaClass {
int specific;
Test(int a, int b, int c)
{
super(a, b, c);
System.out.println("Hey! I am the subclass constructor");
specific = 79;
}
}
Sache, die mich verwirrt, ist, dass die Ausgabeanweisung im MyFirstJavaClass Konstruktor wird nicht ausgeführt. Ich erwartete es zur Ausgabe etwas wie:
Hey! I am the superclass constructor
Hey! I am the subclass constructor
Aber was ich bekommen ist:
Hey! I am the subclass constructor
Ich bin sicher, dass der Oberklassenkonstruktors genannt wird, weil es Variable initialisiert, die vererbt werden, um die Werte angegeben, wenn Erstellen eines Testobjekts Warum wurde die Ausgabeanweisung nicht ausgeführt?
Es kann einige Tippfehler geben, die zu Kompilierzeitfehlern führen, weil ich diese Frage auf meinem Handy eintippe. Ich bin mir sicher, dass meine ursprünglichen Klassen keine Fehler enthalten.
Sind Sie sicher, dass der von Ihnen ausgeführte Code tatsächlich zwei Druckanweisungen enthält? Ist Ihnen auch bekannt, dass beide print-Anweisungen, die Sie uns gezeigt haben, auf den Superklassenkonstruktor verweisen? –
Entschuldigung! Tastaturhinweise verwirrten mich. Die Frage ist jetzt bearbeitet. –
Überprüfen Sie die Pakete und andere Konstruktoren und den Bereitstellungsprozess. Verwenden Sie außerdem einen Debugger, damit Sie Schritt für Schritt nachverfolgen können. – Leo