2016-05-29 6 views
-1

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.

+0

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? –

+0

Entschuldigung! Tastaturhinweise verwirrten mich. Die Frage ist jetzt bearbeitet. –

+0

Ü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

Antwort

0

Wie in den Kommentaren angedeutet, sind Ihre Probleme nicht auf die Codierung per se zurückzuführen: Ihre "erwarteten" stdout Ergebnisse sind korrekt in Bezug auf das, was auftreten würde. Die erste Druckanweisung geht irgendwo/irgendwie verloren. Höchstwahrscheinlich packen Sie die Klassen nicht richtig zusammen.

Es gibt eine Trennung zwischen dem Code, den Sie gepostet haben, und dem Code, der ausgeführt wird - es kann an Ihnen liegen, herauszufinden, warum die Verpackung nicht funktioniert. Man könnte beginnen mit:

  • (a) voll sauber machen/wieder aufzubauen und
  • (b) mit dem Debugger Schreiten durch.

mit (b) Sie werden sehen, warum der Code waren nicht ausgeführt wird, was Sie

+0

Ich denke, dass meine IDE das für mich tut. Oder fehlt mir etwas? Bitte beschreiben. –

+0

Nun, Sie hatten nicht einmal im OP erwähnt, dass Sie eine IDE verwendet haben. Ich habe die Antwort mit weiteren Anmerkungen zu diesem Thema aktualisiert. – javadba

0

erwartet ich glaube, das Problem ist, wie Sie das Objekt für Test-Klasse machen. Entfernen Sie die main() aus Ihrer ersten Klasse.

Machen Sie eine dritte Klasse, die keine Klassen erweitert.

Erstellen Sie eine main() Methode in dieser Klasse und erstellen Sie dann ein Objekt für Test Klasse in dieser Methode.

Jetzt den Code ausführen.

this helps :)

-1

Ich habe versucht, den Code auf meinem Eclipse IDE ausgeführt wird.Der Code funktioniert gut und zeigt an:

Hey! I am the superclass constructor 
Hey! I am the subclass constructor 

Logik ist in Ordnung. Stellen Sie sicher, dass Sie den richtigen Paketnamen für Ihre Klassen angeben.

-1

Ihr Code in meiner IDE ausgeführt, wie Sie möchten. Es gibt kein Problem mit dem Code.

Verwandte Themen