C# Method Overriding (Metot Ezme)
Method Overriding (Metot Ezme), Nesne Yönelimli Programlama’nın (OOP) en önemli özelliklerinden biridir. Bir alt sınıf, üst sınıfta tanımlanan bir metodu kendine özgü şekilde yeniden tanımlayabilir. Bu sayede, türetilmiş sınıflar kendi davranışlarını özelleştirebilir.
Method Overriding Nedir?
- Üst sınıfta tanımlanan bir metot, alt sınıfta yeniden yazılabilir.
- Üst sınıftaki metot
virtual
olarak tanımlanmalıdır. - Alt sınıfta metodu geçersiz kılmak (override etmek) için
override
anahtar kelimesi kullanılır. - Override edilen metot, üst sınıftakiyle aynı parametre listesine sahip olmalıdır.
Method Overriding Kullanımı
Aşağıda, Animal
sınıfındaki bir metot, Dog
ve Cat
sınıflarında farklı şekilde ezilmektedir:
using System; class Animal { // Üst sınıftaki metot virtual olarak tanımlandı public virtual void MakeSound() { Console.WriteLine("Hayvan ses çıkarıyor."); } } class Dog : Animal { // Metodu geçersiz kılma (override) public override void MakeSound() { Console.WriteLine("Köpek havlıyor: Hav hav!"); } } class Cat : Animal { // Metodu geçersiz kılma (override) public override void MakeSound() { Console.WriteLine("Kedi miyavlıyor: Miyav miyav!"); } } class Program { static void Main(string[] args) { Animal myAnimal = new Animal(); myAnimal.MakeSound(); // Hayvan ses çıkarıyor. Dog myDog = new Dog(); myDog.MakeSound(); // Köpek havlıyor: Hav hav! Cat myCat = new Cat(); myCat.MakeSound(); // Kedi miyavlıyor: Miyav miyav! } }
Programın Çıktısı
Hayvan ses çıkarıyor. Köpek havlıyor: Hav hav! Kedi miyavlıyor: Miyav miyav!
Base Anahtar Kelimesi ile Üst Sınıf Metodunu Çağırma
Eğer alt sınıf, üst sınıftaki metodu tamamen değiştirmek yerine, önce üst sınıfın metodunu çalıştırıp sonra kendi işlemini yapmak isterse, base
anahtar kelimesi kullanılabilir.
class Animal { public virtual void MakeSound() { Console.WriteLine("Hayvan bir ses çıkarıyor..."); } } class Dog : Animal { public override void MakeSound() { base.MakeSound(); // Üst sınıfın metodunu çağırır Console.WriteLine("Köpek ayrıca havlıyor: Hav hav!"); } } class Program { static void Main(string[] args) { Dog myDog = new Dog(); myDog.MakeSound(); } }
Programın Çıktısı
Hayvan bir ses çıkarıyor... Köpek ayrıca havlıyor: Hav hav!
Method Overriding ile Polimorfizm
Polimorfizm sayesinde, üst sınıf referansı kullanılarak alt sınıf nesneleri çağrılabilir:
class Program { static void Main(string[] args) { Animal myAnimal1 = new Dog(); Animal myAnimal2 = new Cat(); myAnimal1.MakeSound(); // Köpek havlıyor: Hav hav! myAnimal2.MakeSound(); // Kedi miyavlıyor: Miyav miyav! } }
Abstract Sınıflarla Method Overriding
Eğer üst sınıfta bir metodun tüm alt sınıflar tarafından ezilmesini zorunlu kılmak istiyorsanız, metodu abstract
olarak tanımlayabilirsiniz:
abstract class Animal { public abstract void MakeSound(); // Abstract metot (gövdesiz) } class Dog : Animal { public override void MakeSound() { Console.WriteLine("Köpek havlıyor: Hav hav!"); } } class Cat : Animal { public override void MakeSound() { Console.WriteLine("Kedi miyavlıyor: Miyav miyav!"); } } class Program { static void Main(string[] args) { Animal myDog = new Dog(); Animal myCat = new Cat(); myDog.MakeSound(); // Köpek havlıyor: Hav hav! myCat.MakeSound(); // Kedi miyavlıyor: Miyav miyav! } }
Sonuç
Method Overriding, alt sınıfların üst sınıftaki metotları değiştirmesine olanak tanır. virtual
ve override
anahtar kelimeleri ile uygulanır. Ayrıca abstract
metotlarla, alt sınıfların belirli metotları mutlaka ezmesini sağlayabilirsiniz. Bu yöntem, kodun esnekliğini ve yeniden kullanılabilirliğini artırır.