Java mit kopierkonstruktor anderen Konstruktor nutzen wie?
Hi,
wie rufe ich in einem Kopierkonstruktor einen anderen Konstruktor auf, der einen Array initialisieren soll, mit dem Konstruktor den er aufruft? Die Theorie ist mir klar, ich kenne die Syntax aber nicht und weiß nicht, wie es aussshen sollte
2 Antworten
Die Frage ist etwas wirr gestellt, einen anderen Konstruktor der aktuellen Klasse kannst du mit this(...) aufrufen.
Schau dir mal das Beispiel an:
public class Schueler {
private String vorname;
private String nachname;
private int[] noten;
// Normaler Konstruktor
public Schueler(String vorname, String nachname) {
this.vorname = vorname;
this.nachname = nachname;
this.noten = new int[15]; // Array wird initialisiert
}
// Kopierkonstruktor
public Schueler(Schueler original) {
// Anderen Konstruktor aufrufen.
// vorname, nachname und noten werden initialisiert
this(original.vorname, original.nachname);
// Kopie vom Array erstellen
this.noten = Arrays.copyOf(original.noten, original.noten.length);
}
}
Ja aber ich darf clone ja nicht nutzen. Ich habe einen Konstruktor der hat eine clone methode und in einem anderen Konstruktor soll ich den Konstruktor mit der clone Methode aufrufen. Das Problem ist, dass ich noch zwei weitere Konstruktoren habe und ich nicht weiß, wie ich genau den aufrufe.
du machst halt noch ein construktor mit anderer signatur .
und dann aufrufen mit der entsprechenden signatur
hier mal diskutiert.
https://www.java-forum.org/thema/mehrere-konstruktoren-fuer-eine-klasse.21327/
Genau, das habe ich schon gesehen, aber ich rede von wirklichen kopierkonstruktoren. Dürfen die z. B. als Parametertyp nicht nur den Namen der Klasse haben?
beim kopieren brauchst du doch nur die klasse selber , sonst ist es doch kein kopieren .
aber du kannst ja mehrere konstruktoren machen und dir was basteln . also n cihts ist unmöglich , nur der eine fall wird eben kopierkunstruktor genannt . ansonten ist es halt nicht ein kopierkonstruktor .
also einfach so wie definiert wurde
und klar kannst du auch merhere variablen da reinpacken in die signatur , hindert dich ja nix dran . nur nennt man das eben nciht standard kopierkonstruktor , nennste ihn halt anders . und musst natürlich dann auch die variablen mitliefern damit der richtige konstruktor genommen wird . deswegen sagte ich ja , die signatur bestimmt es , also muss du es auch dann so mit der passenden signatur angeben .
also
public A(b,c) {
}
public A(A) {
}
public A(d) {
}
public A(A(d)) {
}
public A(A,e)
meinst du sowas:
public A(A(d)) {
}
keine ahnung ob das funktioniert oder ob man nicht gleich mit A(A,e) arbeitest .
bin schon lange raus aus dem thema ;) müsste ich probieren was compiler dazu sagen .
danke dir, aber arrays.copyof dürfen wir nicht nutzen. WIr haben nur eine Methode die ein array kopiert mit clone und wir sollen diese methode in einer andere methode aufrufen Also beides sind kosntruktoren