Rantai Konstruktor
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 23 dari 87.
Chaining konstruktor adalah proses memanggil satu konstruktor dari konstruktor lain. Teknik ini membantu menghindari duplikasi kode ketika sebuah class memiliki beberapa konstruktor atau saat bekerja dengan hierarki pewarisan.
Dalam class yang sama, kamu bisa merangkai constructor menggunakan this(). Dengan begitu, kamu bisa memiliki satu constructor "utama" yang melakukan semua pekerjaan, sementara constructor lainnya hanya mendelegasikan tugas kepadanya:
public class Rectangle {
private int width;
private int height;
public Rectangle() {
this(1, 1); // Memanggil konstruktor dengan dua parameter
}
public Rectangle(int size) {
this(size, size); // Membuat persegi
}
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
}Dalam pewarisan, pemanggilan constructor secara berantai terjadi secara otomatis. Saat kamu membuat object subclass, Java memanggil constructor parent terlebih dahulu menggunakan super(). Jika kamu tidak memanggil super() secara eksplisit, Java otomatis menyisipkan super() (versi tanpa argumen):
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
System.out.println("Animal constructor");
}
}
public class Dog extends Animal {
private String breed;
public Dog(String name, String breed) {
super(name); // Harus berada di baris pertama
this.breed = breed;
System.out.println("Dog constructor");
}
}Membuat new Dog("Buddy", "Labrador") mencetak "Animal constructor" terlebih dahulu, lalu "Dog constructor". Ini memastikan class induk selalu diinisialisasi dengan benar sebelum class anak menambahkan penyiapannya sendiri.
Tantangan
MudahMari buat sistem pemesanan produk yang menunjukkan chaining constructor di dalam class dan di seluruh hierarki pewarisan. Kamu akan melihat bagaimana this() melakukan chaining constructor dalam class yang sama, sedangkan super() melakukan chaining ke constructor parent.
Kamu akan membuat tiga file untuk mengatur kodemu:
Product.java: Buat class parent yang mewakili produk apa pun di toko. Class ini harus memiliki:- Field private untuk
name(String) danprice(double) - Constructor utama yang menerima name dan price, menginisialisasi field, lalu mencetak:
Product constructor: [name] - Constructor kedua yang hanya menerima name dan melakukan chaining ke constructor utama menggunakan
this(name, 0.0)untuk menetapkan harga default 0.0 - Method
getName()dangetPrice()untuk mengakses field
- Field private untuk
Electronics.java: Buat subclass yang mewarisi Product dan menambahkan informasi garansi:- Field private untuk
warrantyYears(int) - Constructor utama yang menerima name, price, dan warrantyYears, gunakan
super(name, price)untuk menginisialisasi parent, lalu tetapkan garansi dan cetak:Electronics constructor: [warrantyYears] year warranty - Constructor kedua yang hanya menerima name dan price, lalu melakukan chaining ke constructor utama dengan
this(name, price, 1)untuk memberikan garansi default 1 tahun - Constructor ketiga yang hanya menerima name, lalu melakukan chaining ke constructor kedua dengan
this(name, 0.0) - Method
getDetails()yang mengembalikan:[name] - $[price] ([warrantyYears] year warranty)
- Field private untuk
Main.java: Tunjukkan cara kerja chaining constructor. Kamu akan menerima tiga input: nama produk (String), harga (double), dan tahun garansi (int). Buat object Electronics menggunakan ketiga parameter, lalu cetak hasilgetDetails().
Kamu akan menerima tiga input: nama produk, harga, dan tahun garansi.
Format harga di getDetails() agar menampilkan 2 angka di belakang desimal menggunakan String.format("%.2f", price). Perhatikan output dengan saksama, kamu akan melihat pesan constructor muncul secara berurutan dan menunjukkan alur chaining dari parent ke child!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String name = scanner.nextLine();
double price = scanner.nextDouble();
int warrantyYears = scanner.nextInt();
// TODO: Buat object Electronics menggunakan ketiga parameter
// TODO: Tampilkan hasil getDetails()
}
}
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