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 #
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:
Rekening REK-5001 a.n. Budi - Saldo: Rp500000
Rekening REK-5002 a.n. Siti - Saldo: Rp0Mari kita telaah baris demi baris:
- Constructor pertama: menerima tiga parameter dan mengisi ketiga field, termasuk saldo awal.
- Constructor kedua: menerima dua parameter dan mengisi
Saldodengan0, sesuai aturan rekening yang dibuka tanpa setoran. new RekeningBank("REK-5001", "Budi", 500000): compiler mencocokkan tiga argumen dengan constructor pertama.new RekeningBank("REK-5002", "Siti"): hanya ada dua argumen, sehingga compiler memilih constructor kedua dan saldo object Siti menjadiRp0.
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.