Menu
Coddy logo textTech

clone() Metodu

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 43 / 87.

clone() yöntemi bir nesnenin kopyasını oluşturur. Bunu kullanmak için sınıfınızın Cloneable arayüzünü uygulaması ve Object sınıfındaki clone() yöntemini geçersiz kılması gerekir.

public class Person implements Cloneable {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public Person clone() {
        try {
            return (Person) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }
}

Artık nesnelerin bağımsız kopyalarını oluşturabilirsin:

Person original = new Person("Alice", 25);
Person copy = original.clone();
// copy aynı değerlere sahip ayrı bir nesnedir

Varsayılan olarak, clone() bir sığ kopyalama gerçekleştirir; yani ilkel değerleri ve referansları kopyalar. Nesneniz alan olarak başka nesneler içeriyorsa hem özgün nesne hem de klon aynı iç içe nesnelere başvurur. İç içe nesnelerle gerçekten bağımsız kopyalar oluşturmak için, clone() yönteminiz içinde bu iç içe nesneleri de klonlayarak bir derin kopyalama uygulamanız gerekir.

challenge icon

Görev

Kolay

Nesne klonlamayı gösteren bir belge yönetim sistemi oluşturalım. Bağımsız kopyalar oluşturmak için klonlanabilen bir Document sınıfı oluşturacaksın; böylece kullanıcılar orijinali koruyarak belgeleri çoğaltabilecek.

Kodunu iki dosya arasında düzenleyeceksin:

  • Document.java: Klonlamayı destekleyen bir belgeyi temsil eden bir sınıf oluştur. Bir Document üç private alana sahiptir: title (String), author (String) ve version (int). Tüm alanları başlatmak için bir kurucu ve her biri için getter metotları ekle. Ayrıca sürüm numarasını güncellemek için bir setVersion(int version) metodu ekle.

    Document sınıfının Cloneable arayüzünü uygulamasını sağla ve bir Document döndürecek şekilde clone() metodunu geçersiz kıl. Metot içinde CloneNotSupportedException istisnasını, onu bir RuntimeException içine sararak ele al.

    toString() metodunu, X, Y ve Z'nin gerçek alan değerleri olduğu şu ifadeyi döndürecek şekilde geçersiz kıl: Document[title=X, author=Y, version=Z].

  • Main.java: Bir belge oluşturup onu klonlayarak Document sınıfını çalışır hâle getir. Üç girdi alacaksın: bir başlık (String), bir yazar (String) ve bir sürüm numarası (int).

    Bu değerlerle özgün bir Document oluştur, ardından bir kopya oluşturmak için onu klonla. Klonlamadan sonra setVersion() kullanarak kopyanın sürümünü 1 artır. Bu, klonun gerçekten özgün belgeden bağımsız olduğunu gösterir.

    Üç satır yazdır:

    1. Original: ve ardından özgün belgenin toString() metodu
    2. Clone: ve ardından klonlanan belgenin toString() metodu
    3. Independent: ve ardından özgün belge ile klonun farklı nesneler olup olmadığını belirten true veya false (!= karşılaştırmasını kullan)

Üç girdi alacaksın: belge başlığı (String), yazar adı (String) ve sürüm numarası (int).

Klonun sürümünü değiştirdikten sonra özgün belgenin nasıl değişmeden kaldığına dikkat et. Bu, clone() metodunun gerçekten bağımsız bir kopya oluşturduğunu kanıtlar!

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        int version = scanner.nextInt();
        
        // TODO: Giriş değerleriyle orijinal bir Document oluştur
        
        // TODO: Bir kopya oluşturmak için orijinal belgeyi klonla
        
        // TODO: Klonun version değerini 1 artırarak değiştir
        
        // TODO: "Original: " yazdır ardından orijinal belgeyi
        
        // TODO: "Clone: " yazdır ardından klonlanmış belgeyi
        
        // TODO: "Independent: " yazdır ardından true/false (original != clone kontrolü yap)
        
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi