Aplikasi manajemen armada menyimpan data kendaraan yang beragam: mobil penumpang, truk, dan motor. Semua tipe tersebut sama-sama memiliki merek dan jumlah roda, sehingga menulis ulang field dan method yang sama di setiap class hanya menghasilkan kode duplikat yang rawan tidak sinkron. Inheritance menyelesaikan masalah tersebut dengan mengizinkan satu class mewarisi member milik class lain. Class yang mewariskan disebut base class, sedangkan class yang mewarisi disebut derived class.

Relasi is-a Antara Dua Class #

Hubungan Mobil dan Kendaraan disebut relasi is-a: sebuah mobil adalah kendaraan. Karena relasi itu berlaku, derived class boleh memakai seluruh member non-private milik base class seolah member tersebut miliknya sendiri. Arah sebaliknya tidak berlaku, karena tidak setiap kendaraan adalah mobil; member khusus milik Mobil seperti bagasi tidak dimiliki oleh Kendaraan.

Contoh: Hierarki Kendaraan #

csharp
public class Kendaraan
{
    public string Merek;
    public int JumlahRoda;

    public void TampilkanInfo()
    {
        Console.WriteLine($"{Merek} dengan {JumlahRoda} roda.");
    }
}

public class Mobil : Kendaraan
{
    public int JumlahPintu;

    public void BukaBagasi()
    {
        Console.WriteLine("Bagasi mobil terbuka.");
    }
}

Kendaraan kendaraanUmum = new Kendaraan();
kendaraanUmum.Merek = "Suzuki";
kendaraanUmum.JumlahRoda = 4;
kendaraanUmum.TampilkanInfo();

Mobil mobil = new Mobil();
mobil.Merek = "Toyota";
mobil.JumlahRoda = 4;
mobil.JumlahPintu = 4;
mobil.TampilkanInfo();
mobil.BukaBagasi();

Output yang Dihasilkan:

text
Suzuki dengan 4 roda.
Toyota dengan 4 roda.
Bagasi mobil terbuka.

Mari kita bedah baris demi baris:

  1. class Kendaraan: Base class ini mendeklarasikan dua field dan satu method yang berlaku untuk semua kendaraan.
  2. class Mobil : Kendaraan: Tanda titik dua menyatakan bahwa Mobil mewarisi Kendaraan, sehingga compiler membawa seluruh member Kendaraan ke dalam Mobil.
  3. mobil.Merek = "Toyota" dan mobil.JumlahRoda = 4: Kedua field ini tidak dideklarasikan di Mobil; field tersebut diakses di sini sebagai warisan.
  4. mobil.TampilkanInfo(): Method milik Kendaraan berjalan melalui object Mobil dan mencetak data yang diisi baris sebelumnya.
  5. mobil.BukaBagasi(): Method tambahan milik Mobil bekerja sebagaimana biasa; member warisan dan member sendiri dapat dipanggil bergantian tanpa perbedaan sintaks.

Batasan Pewarisan Tunggal #

Satu class di C# hanya boleh memiliki satu base class, dan penulisan tanda titik dua hanya menampung satu nama class. Rantai pewarisan tetap boleh panjang, misalnya Kendaraan diwarisi Mobil, lalu Mobil diwarisi MobilBalap. Class apa pun yang tidak menyebut base class secara eksplisit mewarisi class Object, sehingga method umum seperti ToString() tersedia di seluruh class.

Bab berikutnya membedah kata kunci base, yang mengatur cara derived class menyerahkan pekerjaan konstruksi dan pemanggilan method kepada base class-nya.