Pengkonstruktor Overloading di Java – Dijelaskan dengan Contoh Kode Praktis
Apa Itu Konstruktor di Java?
Sebuah konstruktor adalah metode khusus yang menginisialisasi objek yang baru dibuat segera setelah alokasi memori. Ia menyetel bidang objek ke nilai yang diinginkan atau, jika dihilangkan, ke nilai default mereka. Mendefinisikan konstruktor adalah opsional; jika tidak ada yang disediakan, kompiler menyediakan konstruktor default yang menetapkan nilai default standar:
- Primitif numerik (int, double, dll.) → 0
- char → '\0'
- Referensi objek → null
Tutorial ini mencakup:
- Aturan untuk membuat konstruktor
- Overloading konstruktor
- Constructor chaining
Aturan untuk Membuat Konstruktor Java
- Nama konstruktor harus cocok persis dengan nama kelas.
- Tidak dapat memiliki tipe kembalian, bahkan
void.
Contoh 1 – Konstruktor Pertama
Langkah 1: Masukkan kode berikut ke dalam editor Java Anda.
class Demo { int value1; int value2; Demo() { value1 = 10; value2 = 20; System.out.println("Di dalam Konstruktor"); } public void display() { System.out.println("Value1 === " + value1); System.out.println("Value2 === " + value2); } public static void main(String[] args) { Demo d1 = new Demo(); d1.display(); } } Langkah 2: Kompilasi dan jalankan program. Keluaran:
Di dalam Konstruktor Value1 === 10 Value2 === 20
Overloading Konstruktor di Java
Java memungkinkan sebuah kelas untuk mendefinisikan banyak konstruktor dengan daftar parameter yang berbeda. Kompiler membedakan mereka berdasarkan jumlah dan tipe parameter.
Konstruktor yang valid untuk kelas bernama Account mungkin terlihat seperti:
Account(int a); Account(int a, int b); Account(String a, int b);
Contoh 2 – Konstruktor Overloaded
Langkah 1: Masukkan kode berikut.
class Demo { int value1; int value2; /* Demo() { value1 = 10; value2 = 20; System.out.println("Di dalam Konstruktor 1"); } */ Demo(int a) { value1 = a; System.out.println("Di dalam Konstruktor 2"); } Demo(int a, int b) { value1 = a; value2 = b; System.out.println("Di dalam Konstruktor 3"); } public void display() { System.out.println("Value1 === " + value1); System.out.println("Value2 === " + value2); } public static void main(String[] args) { Demo d1 = new Demo(); Demo d2 = new Demo(30); Demo d3 = new Demo(30, 40); d1.display(); d2.display(); d3.display(); } } Langkah 2: Kompilasi dan jalankan. Anda akan menemukan kesalahan karena konstruktor default Demo() hilang setelah Anda menambahkan konstruktor berparameter. Untuk menggunakan konstruktor default, deklarasikan secara eksplisit:
Demo() { // inisialisasi default atau logika kustom } Setelah membuka komentar blok yang di-comment dan mengompilasi ulang, program berjalan dengan benar.
Constructor Chaining
Saat subclass diinstantiasi, konstruktor superclass dieksekusi terlebih dahulu—ini dikenal sebagai constructor chaining.
Contoh 3 – Chaining antara Induk dan Anak
Langkah 1: Salin kode di bawah ini.
class Demo { int value1; int value2; Demo() { value1 = 1; value2 = 2; System.out.println("Di dalam Konstruktor Induk 1"); } Demo(int a) { value1 = a; System.out.println("Di dalam Konstruktor Induk 2"); } public void display() { System.out.println("Value1 === " + value1); System.out.println("Value2 === " + value2); } public static void main(String[] args) { DemoChild d1 = new DemoChild(); d1.display(); } } class DemoChild extends Demo { int value3; int value4; DemoChild() { // super(5); // Buat komentar untuk memanggil konstruktor induk yang overloaded value3 = 3; value4 = 4; System.out.println("Di dalam Konstruktor Anak"); } public void display() { System.out.println("Value1 === " + value1); System.out.println("Value2 === " + value2); System.out.println("Value3 === " + value3); System.out.println("Value4 === " + value4); } } Langkah 2: Jalankan program. Karena konstruktor anak tidak secara eksplisit memanggil super(), konstruktor default Demo() berjalan terlebih dahulu. Keluaran yang diharapkan:
Di dalam Konstruktor Induk 1 Di dalam Konstruktor Anak Value1 === 1 Value2 === 2 Value3 === 3 Value4 === 4
Langkah 3: Untuk memanggil konstruktor induk yang overloaded Demo(int a), tempatkan super(5); sebagai baris pertama dalam konstruktor anak. Setelah membuka komentar baris dan menjalankan ulang:
Di dalam Konstruktor Induk 2 Di dalam Konstruktor Anak Value1 === 5 Value2 === 0 Value3 === 3 Value4 === 4
Menggunakan super(...) adalah wajib saat Anda memerlukan konstruktor superclass tertentu untuk berjalan sebelum logika subclass.