Sebuah rekening dapat dibuka dengan setoran awal maupun tanpa setoran. Data awal kedua kasus itu berbeda, padahal keduanya membuat rekening dengan jenis yang sama. Memaksa satu constructor melayani kedua kasus berarti memaksa pemanggil mengisi argumen yang tidak selalu tersedia. Constructor overloading menyelesaikannya dengan menyediakan beberapa constructor dalam satu class, masing-masing dengan daftar parameter yang berbeda.

Aturan Overloading Constructor #

Sejumlah constructor dapat hidup berdampingan dalam satu class selama memenuhi aturan overloading yang sama seperti overloading method:

  • Nama semua constructor sama, yaitu nama class itu sendiri.
  • Daftar parameter harus berbeda, baik dari jumlah, tipe, maupun urutan tipenya.
  • Compiler memilih constructor berdasarkan argumen pada pemanggilan new, dan hanya satu constructor yang benar-benar dijalankan per pemanggilan.

Dalam memilih overload, compiler mencocokkan jumlah argumen terlebih dahulu, lalu tipe setiap argumen. Nama parameter tidak memengaruhi pemilihan; yang diperiksa hanyalah jumlah, tipe, dan urutan tipenya. Apabila tidak ada constructor yang cocok, atau dua constructor sama-sama cocok, compiler melaporkan galat pada baris pemanggilan tersebut.

Contoh: Dua Cara Membuka Rekening #

csharp
public class RekeningBank
{
    public string Nomor;
    public string Pemilik;
    public int Saldo;

    public RekeningBank(string nomor, string pemilik, int saldoAwal)
    {
        Nomor = nomor;
        Pemilik = pemilik;
        Saldo = saldoAwal;
    }

    public RekeningBank(string nomor, string pemilik)
    {
        Nomor = nomor;
        Pemilik = pemilik;
        Saldo = 0;
    }

    public void TampilkanInfo()
    {
        Console.WriteLine($"Rekening {Nomor} a.n. {Pemilik} - Saldo: Rp{Saldo}");
    }
}

RekeningBank rekeningBudi = new RekeningBank("REK-5001", "Budi", 500000);
RekeningBank rekeningSiti = new RekeningBank("REK-5002", "Siti");

rekeningBudi.TampilkanInfo();
rekeningSiti.TampilkanInfo();

Output yang Dihasilkan:

text
Rekening REK-5001 a.n. Budi - Saldo: Rp500000
Rekening REK-5002 a.n. Siti - Saldo: Rp0

Mari kita telaah baris demi baris:

  1. Constructor pertama: menerima tiga parameter dan mengisi ketiga field, termasuk saldo awal.
  2. Constructor kedua: menerima dua parameter dan mengisi Saldo dengan 0, sesuai aturan rekening yang dibuka tanpa setoran.
  3. new RekeningBank("REK-5001", "Budi", 500000): compiler mencocokkan tiga argumen dengan constructor pertama.
  4. new RekeningBank("REK-5002", "Siti"): hanya ada dua argumen, sehingga compiler memilih constructor kedua dan saldo object Siti menjadi Rp0.

Kedua constructor menulis penugasan yang mirip. Duplikasi sekecil ini masih wajar, tetapi C# menyediakan cara memanggil constructor dari constructor lain agar penugasan ditulis sekali saja. Mekanisme tersebut memakai kata kunci this dan dibahas tuntas pada bab This Keyword. Overload juga dapat ditambah bertahap: ketika kebutuhan data awal baru muncul, kita cukup menambah satu constructor lagi tanpa mengubah constructor yang sudah ada.