"Spielen" mit Konstruktoren

Status
Nicht offen für weitere Antworten.

depood

Mitglied
Huhu,.. mir fehlt gerade etwas das Verständnis von vererbten konstruktoren...

kleines Codebsp:

[Java]
public class Buh {
public Buh (int i) {}
public Buh (String s) {}
public Buh (String s, int i) {}
}

class SohnVonBuh extends Buh {

public SohnVonBuh() {
super("Buh");
}

public SohnVonBuh (int i) {
super("Fred");
}

public SohnVonBuh (String s) {
super(42);
}

public SohnVonBuh (int i, String s) {
}

public SohnVonBuh (String a, String b, String c) {
super(a, b);
}

public SonVonBuh (int i, int j) {
super("Mann", j);
}

public SohnVonBuh (int i, int x, int y) {
super(i, "Stern");
}
}
[/code]

Folgendes Problem:
Konstruktoren in dehnen ich super(); aufrufe .. rufen den Konstruktor der Superklasse auf. Die Codebeispiele sind aus meinem Buch und dabei sollte ich, nicht Kompilierbare Konstruktoren rausfinden und 3 Fehlermeldungen zuweisen.

Nur leider versteh ich nicht direkt wie der Compiler hier arbeitet. Ich weiß das jedes Argument gesetzt werden muss beim Aufruf.

Java:
super("Buh");
müsste dann eigentlich
Java:
public Buh (String s);
sein oder?


Wie sieht das dann bei
[Java]
public Buh (String s);
[/Java]
+
[Java]
public SohnVonBuh (int i) {
super("Fred");
}
[/Java]

Müssen die 2 Argument Typen gleich sein damit der Konstruktor super() aufrufen darf?

Ich hoffe ihr versteht wo ich da gerade nicht mitkomme und meine frage verwirrt nicht allzu sehr.
 

Geeeee

Bekanntes Mitglied
Zeilen 17 (ruft implizit super(); auf), 25 (String, String), 33 (int, String) gehen nicht.
Das liegt daran, dass diese Konstruktoren nicht in der Buh-Klasse definiert ist.
Deine Annahme, dass super("Buh"); auf den Konstruktor public Buh(String string); zugreift stimmt.
 

depood

Mitglied
Also ist es praktisch egal welche Argumente in die SohnVonBuh Konstruktoren übergeben werden. Nur die "Struktur" von Buh ist wichtig.

Der Knoten löst sich langsam im Hirn :)
 
S

Spacerat

Gast
Zeilen 17 (ruft implizit super(); auf), 25 (String, String), 33 (int, String) gehen nicht.
Das liegt daran, dass diese Konstruktoren nicht in der Buh-Klasse definiert ist.
Deine Annahme, dass super("Buh"); auf den Konstruktor public Buh(String string); zugreift stimmt.
Zeile 17 ist doch wohl ein Irrtum ???:L. Die zur begründung passende Zeile müsste doch Zeile 21/22 sein oder sehe ich das falsch? Hat da jmd. noch nachträglich editiert?
Also ist es praktisch egal welche Argumente in die SohnVonBuh Konstruktoren übergeben werden. Nur die "Struktur" von Buh ist wichtig.

Der Knoten löst sich langsam im Hirn :)
Jep.
 
Zuletzt bearbeitet von einem Moderator:

depood

Mitglied
Der Code oben von mir ist mit Absicht Fehlerhaft weil ich da die Fehler suchen und rausfinden sollte.

Warum ist Zeile 17 fehlerhaft? super(42) sollte doch Buh (int i); sein .
Ich hab da nachträglich nichts am code verändert
 
S

Spacerat

Gast
...Dann ist Geeeee halt der schuldige :)... Er hat fälschlicherweise die Zeile 17 statt die 21 angeprangert.
 

depood

Mitglied
Is die Zeile 21 wirklich für den Kompiler falsch? Hier gehts ja nicht um sinn sondern einfach nur ob der Kompiler meckert. Soweit ich mich erinnern kann setzt der Kompiler doch bei fehlender super() die automatisch in jeden Konstruktor ein.
 
S

Spacerat

Gast
Richtig... das tut er. Aber hat Buh den einen impliziten (parameterlosen) Konstruktor? Nein. Und deswegen gibts einen Fehler.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben