Panduan Lengkap Pemwarisan di C# untuk Pemula

Hai teman-teman yang sedang belajar pemrograman! Hari ini, kita akan memulai perjalanan menarik ke dunia pemwarisan di C#. Jangan khawatir jika Anda masih pemula – saya akan menjadi panduan ramah Anda, dan kita akan meng eksplor konsep ini secara bertahap. Pada akhir panduan ini, Anda akan memiliki pengetahuan kuat tentang pemwarisan dan bagaimana itu dapat membuat kode Anda lebih efisien dan terorganisir.

C# - Inheritance

Apa Itu Pemwarisan?

Sebelum kita mendalam, mari kita mulai dengan analogi sederhana. Bayangkan Anda membuat suatu pohon keluarga. Setiap orang di pohon itu mewarisi beberapa ciri dari orang tua mereka, kan? Baiklah, pemwarisan dalam pemrograman bekerja dengan cara yang sama!

Dalam C#, pemwarisan adalah mekanisme yang memungkinkan kelas baru untuk dibuat berdasarkan kelas yang sudah ada. Kelas baru mewarisi properti dan metode kelas yang ada, sama seperti Anda mungkin mewarisi warna mata atau tinggi badan orang tua Anda.

Kelas Dasar dan Kelas Turunan

Dalam dunia pemwarisan, kita memiliki dua pemain utama:

  1. Kelas Dasar (juga disebut Parent atau Superclass): Ini adalah kelas asli yang menyimpan properti dan metode umum.
  2. Kelas Turunan (juga disebut Child atau Subclass): Ini adalah kelas baru yang mewarisi dari kelas dasar.

mari kita lihat contoh sederhana:

// Kelas dasar
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }

public void Eat()
{
Console.WriteLine($"{Name} sedang makan.");
}
}

// Kelas turunan
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} berkata Woof!");
}
}

Dalam contoh ini, Animal adalah kelas dasar, dan Dog adalah kelas turunan. Bagian : Animal dalam deklarasi kelas Dog adalah bagaimana kita mengatakan ke C# bahwa Dog mewarisi dari Animal.

Sekarang, mari kita lihat bagaimana kita bisa menggunakan kelas-kelas ini:

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Age = 3;

myDog.Eat();  // Diwarisi dari Animal
myDog.Bark(); // Didefinisikan di Dog

Ketika kita menjalankan kode ini, kita akan melihat:

Buddy sedang makan.
Buddy berkata Woof!

Apakah itu menarik? Kelas Dog kita memiliki akses ke properti Name dan Age, serta metode Eat() dari kelas Animal, tanpa kita harus menulis semua kode itu lagi!

Inisialisasi Kelas Dasar

Sekarang, Anda mungkin bertanya-tanya, "Apa bila saya ingin mengatur nilai awal untuk kelas dasar saat saya membuat objek kelas turunan?" Pertanyaan bagus! Ini adalah tempat kontruktur memainkan perannya.

mari kita modifikasi contoh kita:

public class Animal
{
public string Name { get; set; }
public int Age { get; set; }

public Animal(string name, int age)
{
Name = name;
Age = age;
}

public void Eat()
{
Console.WriteLine($"{Name} sedang makan.");
}
}

public class Dog : Animal
{
public Dog(string name, int age) : base(name, age)
{
// Inisialisasi tambahan untuk Dog, jika diperlukan
}

public void Bark()
{
Console.WriteLine($"{Name} berkata Woof!");
}
}

Dalam versi ini, kita telah menambahkan kontruktur ke kelas Animal. Konuktur kelas Dog menggunakan sintaks : base(name, age) untuk memanggil konuktur kelas dasar dan mengirimkan parameter name dan age.

Sekarang kita bisa membuat objek Dog seperti ini:

Dog myDog = new Dog("Buddy", 3);
myDog.Eat();
myDog.Bark();

Ini akan menghasilkan output yang sama seperti sebelumnya, tapi sekarang kita menginisialisasi properti Name dan Age saat kita membuat objek Dog.

Pemwarisan Ganda di C

Sekarang, mari kita lihat perputaran: meskipun beberapa bahasa pemrograman lain mendukung pemwarisan ganda untuk kelas, C# tidak mendukung pemwarisan ganda untuk kelas. Ini berarti kelas tidak dapat mewarisi lebih dari satu kelas dasar secara langsung.

Tapi jangan khawatir! C# memiliki solusi cerdik menggunakan interface. Interface adalah seperti kontrak yang menentukan apa yang harus dilakukan kelas, tanpa menentukan bagaimana hal itu dilakukan.

mari kita lihat contoh:

public interface ISwimmable
{
void Swim();
}

public interface IFlyable
{
void Fly();
}

public class Bird : Animal, IFlyable
{
public Bird(string name, int age) : base(name, age) { }

public void Fly()
{
Console.WriteLine($"{Name} sedang terbang.");
}
}

public class Fish : Animal, ISwimmable
{
public Fish(string name, int age) : base(name, age) { }

public void Swim()
{
Console.WriteLine($"{Name} sedang renang.");
}
}

public class Duck : Animal, ISwimmable, IFlyable
{
public Duck(string name, int age) : base(name, age) { }

public void Swim()
{
Console.WriteLine($"{Name} sedang renang.");
}

public void Fly()
{
Console.WriteLine($"{Name} sedang terbang.");
}
}

Dalam contoh ini, kita telah membuat dua interface: ISwimmable dan IFlyable. Kelas Bird mewarisi dari Animal dan mengimplementasikan IFlyable. Kelas Fish mewarisi dari Animal dan mengimplementasikan ISwimmable. Dan lihat kelas Duck kita – itu mewarisi dari Animal dan mengimplementasikan ISwimmable dan IFlyable!

mari kita gunakan kelas-kelas ini:

Bird myBird = new Bird("Tweety", 2);
myBird.Fly();

Fish myFish = new Fish("Nemo", 1);
myFish.Swim();

Duck myDuck = new Duck("Donald", 5);
myDuck.Swim();
myDuck.Fly();

Ini akan menghasilkan output:

Tweety sedang terbang.
Nemo sedang renang.
Donald sedang renang.
Donald sedang terbang.

Apakah itu menakjubkan? Kelas Duck kita dapat renang dan terbang, meskipun C# tidak mendukung pemwarisan ganda untuk kelas!

Tabel Metode

Berikut adalah tabel yang menggabungkan metode yang kita gunakan dalam contoh-contoh ini:

Kelas/Interface Metode Deskripsi
Animal Eat() Menampilkan pesan bahwa hewan sedang makan
Dog Bark() Menampilkan pesan bahwa anjing sedang berbisik
ISwimmable Swim() Menentukan metode untuk renang
IFlyable Fly() Menentukan metode untuk terbang
Bird Fly() Mengimplementasikan metode Fly
Fish Swim() Mengimplementasikan metode Swim
Duck Swim(), Fly() Mengimplementasikan kedua metode Swim dan Fly

Dan itu saja! Kita telah meliputi dasar pemwarisan di C#, dari kelas dasar dan turunan sederhana hingga kasus yang lebih kompleks menggunakan interface. Ingat, pemwarisan tentang penggunaan kode dan menciptakan hubungan logis antara kelas. Ini adalah alat yang kuat yang dapat membuat kode Anda lebih efisien dan mudah dipelihara.

Saat Anda terus melanjutkan perjalanan pemrograman Anda, Anda akan menemukan banyak cara untuk menggunakan pemwarisan untuk memecahkan masalah yang kompleks. Terus latihan, dan jangan takut untuk mencoba konsep-konsep ini. Selamat coding!

Credits: Image by storyset