Junior
Yüzey nüsxə haqqında nə bilirsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Yüzeysel nüsxə (shallow copy) obyektin yeni nüsxəsini yaradır, lakin orijinal obyektin sahələrində istinad etdiyi obyektləri nüsxələməz. Əvəzində, sadəcə istinadlar kopyalanır.
Xüsusiyyətlər:
- Nüsxələr tərəfindən istinad edilən dəyişkən obyektlərdəki dəyişikliklər orijinal obyektə və əksinə görünəcək.
- Bir çox istinada malik obyektlər üçün dərin nüsxədən daha sürətlidir.
Məsələn, clone() metodu (əgər obyekt Cloneable-i implement edirsə) və ya əl ilə həyata keçirilə bilər.
clone() nümunəsi:
// Dəyişkən sahəyə malik sinif yaradırıq
class Address {
String city;
public Address(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"city='" + city + '\'' +
'}';
}
}
// Address-ə istinad edən və `Cloneable`-i implement edən sinif yaradırıq
class Person implements Cloneable {
String name;
Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
// Object.clone() vasitəsilə səthi nüsxə
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address=" + address +
'}';
}
}
// İstifadə nümunəsi
public class ShallowCopyExample {
public static void main(String[] args) throws CloneNotSupportedException {
Address originalAddress = new Address("New York");
Person originalPerson = new Person("Alice", originalAddress);
// Yüzeysel nüsxə
Person copiedPerson = (Person) originalPerson.clone();
System.out.println("Orijinal şəxs: " + originalPerson);
System.out.println("Kopyalanmış şəxs: " + copiedPerson);
// Orijinalin iç içə olan sahəsini dəyişirik...
originalAddress.city = "Los Angeles";
// ...dəyişikliklər həm də kopyada görünür, çünki hər ikisi eyni Address obyektinə istinad edir
System.out.println("\nOrijinal ünvanı dəyişdikdən sonra:");
System.out.println("Orijinal şəxs: " + originalPerson);
System.out.println("Kopyalanmış şəxs: " + copiedPerson);
}
}
İstifadə olunur, çünki obyektlərin bütün hiyerarşisini tam surət etmək lazım deyil və ya iç içə obyektlər dəyişməzdir.