Kodkitabi

Polimorfizm (Çok Biçimlilik)

Sanal metotlar (virtual/override) ve soyut sınıflar (abstract) yardımıyla çok biçimlilik.

Polimorfizm (Çok Biçimlilik), aynı isimdeki bir metodun farklı sınıflarda farklı işlevler gerçekleştirebilmesidir. Kalıtım hiyerarşisinde üst sınıfın tanımladığı bir metot, alt sınıf tarafından değiştirilmek istendiğinde üst sınıfta virtual, alt sınıfta ise override olarak işaretlenir.

abstract sınıflar ise gövdesiz metotlar tanımlayarak alt sınıfların bu metotları yazmasını zorunlu kılar.

Virtual/Override ve Abstract Kullanımı
// Soyut Sınıf (Abstract Class) - new'lenemez
public abstract class Animal
{
    public string Name { get; set; } = string.Empty;

    // Soyut metot: Gövdesi yoktur, alt sınıflar override etmek zorundadır.
    public abstract void MakeSound();

    // Sanal metot: Gövdesi vardır, alt sınıflar isterse override edebilir.
    public virtual void Sleep()
    {
        Console.WriteLine($"{Name} uyuyor...");
    }
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine($"{Name} havlıyor: Hav Hav!");
    }
}

public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine($"{Name} miyavlıyor: Miyav!");
    }

    // Sleep metodunu isteğe bağlı olarak özelleştiriyoruz
    public override void Sleep()
    {
        Console.WriteLine($"{Name} mırıldayarak derin uykuya daldı.");
    }
}

// --------------------------------------------------

Animal myDog = new Dog { Name = "Karabaş" };
Animal myCat = new Cat { Name = "Tekir" };

myDog.MakeSound(); // Hav Hav!
myDog.Sleep();     // Karabaş uyuyor...

myCat.MakeSound(); // Miyav!
myCat.Sleep();     // Tekir mırıldayarak derin uykuya daldı.