Menu
CoddyTech

method clone()

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 43 dari 87.

method clone() membuat salinan object. Untuk menggunakannya, class kamu harus mengimplementasikan interface Cloneable dan meng-override method clone() dari class Object.

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);
        }
    }
}

Sekarang kamu dapat membuat salinan object yang terpisah:

Person original = new Person("Alice", 25);
Person copy = original.clone();
// copy adalah object terpisah dengan nilai yang sama

Secara default, clone() melakukan salinan dangkal, artinya menyalin nilai primitif dan referensi. Jika object-mu berisi object lain sebagai field, baik object asli maupun hasil clone akan merujuk ke object bersarang yang sama. Untuk membuat salinan yang benar-benar independen dengan object bersarang, kamu perlu menerapkan salinan mendalam dengan turut menyalin object bersarang tersebut di dalam method clone()-mu.

challenge icon

Tantangan

Mudah

Mari kita membangun sistem manajemen dokumen yang menunjukkan cloning object. Kamu akan membuat class Document yang dapat di-clone untuk membuat salinan independen, sehingga pengguna dapat menggandakan dokumen sambil mempertahankan dokumen aslinya.

Kamu akan membagi kodemu ke dalam dua file:

  • Document.java: Buat class yang merepresentasikan dokumen dan mendukung cloning. Document memiliki tiga field private: title (String), author (String), dan version (int). Sertakan constructor untuk menginisialisasi semua field dan method getter untuk masing-masing field. Tambahkan juga method setVersion(int version) untuk memperbarui nomor versi.

    Buat class Document-mu mengimplementasikan interface Cloneable dan meng-override method clone() agar mengembalikan Document. Tangani CloneNotSupportedException di dalam method dengan membungkusnya dalam RuntimeException.

    Override toString() agar mengembalikan: Document[title=X, author=Y, version=Z], dengan X, Y, dan Z sebagai nilai field yang sebenarnya.

  • Main.java: Aktifkan class Document-mu dengan membuat dokumen dan meng-clone-nya. Kamu akan menerima tiga input: judul (String), nama penulis (String), dan nomor versi (int).

    Buat Document asli dengan nilai-nilai ini, lalu clone dokumen itu untuk membuat salinan. Setelah cloning, ubah versi salinan dengan menambah nilainya sebesar 1 menggunakan setVersion(). Ini menunjukkan bahwa hasil clone benar-benar independen dari dokumen asli.

    Cetak tiga baris:

    1. Original: diikuti hasil toString() dokumen asli
    2. Clone: diikuti hasil toString() dokumen hasil clone
    3. Independent: diikuti true atau false untuk menunjukkan apakah dokumen asli dan hasil clone merupakan object yang berbeda (gunakan perbandingan !=)

Kamu akan menerima tiga input: judul dokumen (String), nama penulis (String), dan nomor versi (int).

Perhatikan bahwa setelah mengubah versi hasil clone, dokumen asli tetap tidak berubah. Ini membuktikan bahwa clone() membuat salinan yang benar-benar independen!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca input
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        int version = scanner.nextInt();
        
        // TODO: Buat Document asli dengan nilai input
        
        // TODO: Klon document asli untuk membuat salinan
        
        // TODO: Ubah version pada klon dengan menambah nilainya sebesar 1
        
        // TODO: Cetak "Original: " diikuti document asli
        
        // TODO: Cetak "Clone: " diikuti document hasil klon
        
        // TODO: Cetak "Independent: " diikuti true/false (periksa apakah original != clone)
        
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online