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 samaSecara 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.
Tantangan
MudahMari 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), danversion(int). Sertakan constructor untuk menginisialisasi semua field dan method getter untuk masing-masing field. Tambahkan juga methodsetVersion(int version)untuk memperbarui nomor versi.Buat class Document-mu mengimplementasikan interface
Cloneabledan meng-override methodclone()agar mengembalikanDocument. TanganiCloneNotSupportedExceptiondi dalam method dengan membungkusnya dalamRuntimeException.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:
Original:diikuti hasil toString() dokumen asliClone:diikuti hasil toString() dokumen hasil cloneIndependent:diikutitrueataufalseuntuk 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)
}
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online