Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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) dan price (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() dan getPrice() untuk mengakses field
  • 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)
  • 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 hasil getDetails().

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