Sobes.tech
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.