Junior — Middle
El tudná magyarázni, hogy mi a felületi másolási módszer az objektumoknál?
sobes.tech MI
Válasz az MI-től
A felületes másolási módszer egy új objektumot hoz létre, az eredeti objektum mezőértékeinek másolásával. Azonban, ha egy mező egy másik objektumra mutató hivatkozás, akkor csak a hivatkozás másolódik, nem a beágyazott objektum maga. Ez azt jelenti, hogy az eredeti és a másolt objektum ugyanarra a beágyazott objektumra fog hivatkozni.
Java példával:
class Person implements Cloneable {
String name;
Address address; // beágyazott objektum
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone(); // felületes másolat
}
}
class Address {
String city;
public Address(String city) {
this.city = city;
}
}
// Használat:
Person p1 = new Person("Иван", new Address("Москва"));
Person p2 = (Person) p1.clone();
p2.address.city = "Санкт-Петербург";
// Most p1.address.city is also "Санкт-Петербург", mivel az cím megosztott
Ezért a felületes másolás akkor megfelelő, ha a beágyazott objektumok nem változnak, vagy ha nem szükséges az beágyazott objektumok elkülönítése.