Java mit kopierkonstruktor anderen Konstruktor nutzen wie?

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);
	}
}

uqdhui 
Fragesteller
 27.10.2021, 11:43

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

0
daCypher  27.10.2021, 11:44
@uqdhui

Dann nimm halt clone anstatt copyOf.

Du müsstest mal ein bisschen von deinem Code und der Aufgabenstellung preisgeben, damit wird dir helfen können, sonst können wir nur ins Blaue raten.

0
uqdhui 
Fragesteller
 27.10.2021, 13:01
@daCypher

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.

0
daCypher  27.10.2021, 13:22
@uqdhui

Wie gesagt, zeig mal den Code, den du hast.

Wenn du ein Array nicht über copyOf kopieren darfst, musst du die Daten halt "per Hand" von einem Array ins andere kopieren.

0

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/


uqdhui 
Fragesteller
 27.10.2021, 01:49

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?

0
TechPech1984  27.10.2021, 01:55
@uqdhui

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

https://www.it-swarm.com.de/de/java/warum-brauchen-wir-den-kopierkonstruktor-und-wann-sollten-wir-den-kopierkonstruktor-java-verwenden/1052490485/

0
TechPech1984  27.10.2021, 02:00
@uqdhui

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 .

0
TechPech1984  27.10.2021, 02:11
@uqdhui

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 .

1