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.
virtual
olarak tanımlanmalıdır.override
anahtar kelimesi kullanılır.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! } }
Hayvan ses çıkarıyor. Köpek havlıyor: Hav hav! Kedi miyavlıyor: Miyav miyav!
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(); } }
Hayvan bir ses çıkarıyor... Köpek ayrıca havlıyor: Hav hav!
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! } }
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! } }
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.