Shallow copy .super.clone()

akvarel

Mitglied
Hallo!
Ich habe wieder ein kleines Problem heute aber mit shallow copy.
Hier ist die complete Code.
Shallow Copy Test : CloneLanguage BasicsJava

Ja, ich verstehe nich wieso nur den Namen des Autos verändert wird und nicht den Namen der Person.

Hat es damit zu tun, dass man hier den "primitive member" verändert.
Java:
//change the primitive member
    q.setName("Person-B");
Und hier den "the lower-level object.?
Java:
//change the lower-level object
    q.getCar().setName("Accord");

Und wenn ja, wieso wird denn nur lower-level object verändert?
super.clone wirkt nur auf Auto Class? Und dann die Persone Klass wird aber nicht verändert?


Vielen Dank im Vorraus.
 

Suinos

Bekanntes Mitglied
Bei einer shallow-copy wird nur ein neues Objekt erstellt, und zwar eine Kopie dessen Objektes, auf welchem du die Kopie erstellst.
Änderungen auf diesem neuen Objekt wirken sich also nur dort aus, und beeinflussen das andere, originale Objekt nicht.

Die 'tiefen' Objekte werden allerdings nicht kopiert, also haben Original und Kopie je eine Referenz auf das gleiche Objekt.

-

Als Code:
Java:
Person p = new Person("Person-A", "Civic");
1 Person existiert:
Code:
Name: "Person-A", Auto: ->"Civic"
1 Auto existiert:
Code:
Name: "Civic"

Java:
Person q = (Person) p.clone();
2 Personen existieren:
Code:
Name: "Person-A", Auto: ->"Civic"
Code:
Name: "Person-A", Auto: ->"Civic"
(Kopie)
1 Auto existiert:
Code:
Name: "Civic"

Java:
q.setName("Person-B");
2 Personen existieren:
Code:
Name: "Person-A", Auto: ->"Civic"
Code:
Name: "Person-B", Auto: ->"Civic"
(Kopie)
1 Auto existiert:
Code:
Name: "Civic"

Java:
q.getCar().setName("Accord");
2 Personen existieren:
Code:
Name: "Person-A", Auto: ->"Accord"
Code:
Name: "Person-B", Auto: ->"Accord"
(Kopie)
1 Auto existiert:
Code:
Name: "Accord"

---

Übrigens: Strings sind keine primitiven Objekte / Typen, was dort steht ist falsch; es gibt für sie bloss einen kleinen Compiler-Trick, damit man sie einfach und performant mit den Anführungszeichen erstellen kann.
 

akvarel

Mitglied
Änderungen auf diesem neuen Objekt wirken sich also nur dort aus, und beeinflussen das andere, originale Objekt nicht.

Deswegen wird das keinen Einfluss auf p.name(A-Person) haben?
Java:
//change the primitive member
    q.setName("Person-B");


Was ist dann zB. mit
int[]ar={{2,3,4,5},{1,2}};
int []copy=(int[])arrays.clone();
copy[0][0]=99 - das ändert auch die ar.
copy[1]=new {1,2} -das änder aber ar nicht.


Die 'tiefen' Objekte werden allerdings nicht kopiert, also haben Original und Kopie je eine Referenz auf das gleiche Objekt.
...und das Original wird veraendert, wenn ich den Copy verändere? In deisem Fall der "tiefe" Object ist der Car oder? Aber wie kann ich seehen, dass genau Car der "tiefe" Object ist?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Shallow Copy von Objekten Java Basics - Anfänger-Themen 6
S Shallow Copy / Deep Copy von Objekten Java Basics - Anfänger-Themen 4
B Frage zu Shallow vs. DeepClone Java Basics - Anfänger-Themen 14
S Copy - Constructor vs clone() Java Basics - Anfänger-Themen 20
J Count und Copy in Stream<Path> Java Basics - Anfänger-Themen 11
B Copy Paste Befehl Java Basics - Anfänger-Themen 6
S Objekte klonen und Deep Copy Java Basics - Anfänger-Themen 30
B Files.copy wirft Exeption Java Basics - Anfänger-Themen 2
V java nio Files.copy Java Basics - Anfänger-Themen 10
B Copy-Constructor Java Basics - Anfänger-Themen 6
Luk10 Arrays.copy(myArray) vs myArray.clone() Java Basics - Anfänger-Themen 9
B Eclipse Hotkeys (Copy Paste Undo Redo Save) spielen verrückt Java Basics - Anfänger-Themen 6
L Array Copy Java Basics - Anfänger-Themen 7
M Cut, Copy und Paste in Symbolleiste einfügen Java Basics - Anfänger-Themen 4
A Objekt zwischen 2 Java programmen copy+Paste Java Basics - Anfänger-Themen 13
J Funktion Copy Area Java Basics - Anfänger-Themen 13
K Ich möchte in einem Text Editor cut, copy ,paste einfügen! Java Basics - Anfänger-Themen 2
C copy Java Basics - Anfänger-Themen 6
K Ant Copy Folder mit Zugriffschutz ausschliessen. Java Basics - Anfänger-Themen 2
M Cut, Copy und Paste mit mehreren Textfeldern? Java Basics - Anfänger-Themen 3
F Copy - zugriff verweigert ! Java Basics - Anfänger-Themen 5
W deep copy mehrdimensionaler Arrays Java Basics - Anfänger-Themen 11
H Deep Copy von Objekten Java Basics - Anfänger-Themen 4
V Copy & "Paste" im Frame Java Basics - Anfänger-Themen 3
G Über undo, copy, cat, paste, delete Funktionen Java Basics - Anfänger-Themen 3
mrStudent <? extends T> und <? super T> Java Basics - Anfänger-Themen 1
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
M Super(); Java Basics - Anfänger-Themen 1
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
CptK Vererbung Attributtyp in Super-Klasse noch nicht festlegen Java Basics - Anfänger-Themen 1
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
Queiser Super boolean Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B super vs. this Java Basics - Anfänger-Themen 24
M Was macht super (...)? Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
N Frage zu this, super und return Java Basics - Anfänger-Themen 13
E this() / super() Java Basics - Anfänger-Themen 7
T super Java Basics - Anfänger-Themen 3
G funktionen der super-klasse von der super-klasse Java Basics - Anfänger-Themen 6
O Vererbung this innerhalb von super Java Basics - Anfänger-Themen 7
X Frage zu Sub/Super Klassen Java Basics - Anfänger-Themen 7
V Vererbung (wie) kann man eine 'super'-Methode auf ein Objekt anwenden ? Java Basics - Anfänger-Themen 6
E Erste Schritte <? super Unterklasse> Return-Typ darf nicht vom Wildcard-Typ sein Java Basics - Anfänger-Themen 5
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
K Vererbung (super) Java Basics - Anfänger-Themen 2
C Super und Unterklassen Java Basics - Anfänger-Themen 6
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
I Verständnisfrage zu BridgePattern, Verwedung von super() Java Basics - Anfänger-Themen 4
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
A Super Klasse Java Basics - Anfänger-Themen 3
O OOP super aufruf 2 objekte? Java Basics - Anfänger-Themen 3
S super() im Konstruktor Java Basics - Anfänger-Themen 12
L Erste Schritte Super Constructor mit Array - Liste? Java Basics - Anfänger-Themen 15
P Vererbung super() ohne Parameter Java Basics - Anfänger-Themen 2
D Super und Sub-Klassen Java Basics - Anfänger-Themen 2
D super.tostring Java Basics - Anfänger-Themen 8
A Super-Anweisung in abstrakter Klasse Java Basics - Anfänger-Themen 12
K Überschreiben einer "super.super"-Methode Java Basics - Anfänger-Themen 6
Luk10 super() und this Java Basics - Anfänger-Themen 7
S super() aufruf ausgabe Java Basics - Anfänger-Themen 3
L Frage zu Generics: "super" Java Basics - Anfänger-Themen 16
S super.paint() Java Basics - Anfänger-Themen 4
G Vererbung, Konstruktoranweisungen VOR super() Java Basics - Anfänger-Themen 4
G Variablen initialisieren vor super() Java Basics - Anfänger-Themen 8
H Konstruktoren – super! Java Basics - Anfänger-Themen 3
A Am Buch lesen, nun brauch ich eure Hilfe um mir super() zu erklären Java Basics - Anfänger-Themen 4
J Problem mit super Java Basics - Anfänger-Themen 10
G super operator und incompatible types, simple fehler Java Basics - Anfänger-Themen 8
kulturfenster super.paintComponent(g); Java Basics - Anfänger-Themen 3
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
B super methode aufrufen und ergänzen? Java Basics - Anfänger-Themen 5
G Innerhalb von Runnable auf super. zugreifen? Java Basics - Anfänger-Themen 3
X this dynamisch, super statisch? Java Basics - Anfänger-Themen 3
A Frage zu super, abstracte Klassen und Kapselung Java Basics - Anfänger-Themen 3
G frage zu vererbung (super) Java Basics - Anfänger-Themen 10
G super(null) Java Basics - Anfänger-Themen 7
F Der "super" Ausdruck Java Basics - Anfänger-Themen 4
S was macht super() ? Java Basics - Anfänger-Themen 7
J Konstruktor der Oberklasse und super Java Basics - Anfänger-Themen 1
W super.methode Java Basics - Anfänger-Themen 2
G neues String Array in super() übergeben Java Basics - Anfänger-Themen 3
I call to super must be first statement in constructor Java Basics - Anfänger-Themen 3
K java syntax: wofür steht super(screen)? Java Basics - Anfänger-Themen 5
S Verwendung von Super Java Basics - Anfänger-Themen 7
P super an methode übergeben Java Basics - Anfänger-Themen 8
S supertyp steht ohne super in hierachy - eclipse Java Basics - Anfänger-Themen 4
U super-Konstruktor Aufrufen mit Object, dass Exception wirft Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben