C# Kalıtım (Inheritance) Nedir?
Kalıtım (Inheritance), Nesne Yönelimli Programlama’nın (OOP) en önemli kavramlarından biridir. Kalıtım sayesinde bir sınıf, başka bir sınıfın özelliklerini ve metotlarını miras alarak kullanabilir. Bu, kod tekrarını azaltır ve daha düzenli bir yapı sağlar.
Kalıtımın Temel Özellikleri
- Bir sınıf, başka bir sınıfın özelliklerini ve metotlarını devralabilir.
- Alt sınıf (derived class) üst sınıfın (base class) tüm public ve protected üyelerine erişebilir.
- Kalıtım sayesinde kod tekrarından kaçınılır ve kodun bakım maliyeti düşer.
Kalıtımın Söz Dizimi
class BaseClass { // Üst sınıfın özellikleri ve metotları } class DerivedClass : BaseClass { // Alt sınıf, BaseClass'ın özelliklerini ve metotlarını devralır. }
Basit Bir Kalıtım Örneği
Aşağıda, Animal
(Hayvan) adlı bir üst sınıftan türetilen Dog
(Köpek) sınıfı bulunmaktadır:
using System; class Animal { public string Name; public void Eat() { Console.WriteLine($"{Name} yemek yiyor."); } } class Dog : Animal { public void Bark() { Console.WriteLine($"{Name} havlıyor."); } } class Program { static void Main(string[] args) { Dog myDog = new Dog(); myDog.Name = "Karabaş"; myDog.Eat(); // Üst sınıftan miras alınan metot myDog.Bark(); // Alt sınıfa özgü metot } }
Programın Çıktısı
Karabaş yemek yiyor. Karabaş havlıyor.
Kalıtım ile Constructor (Yapıcı Metot) Kullanımı
Alt sınıf, üst sınıfın yapıcı metodunu çağırabilir:
class Animal { public string Name; public Animal(string name) { Name = name; Console.WriteLine("Animal constructor çalıştı."); } } class Dog : Animal { public Dog(string name) : base(name) // Üst sınıfın constructor'ını çağırıyoruz { Console.WriteLine("Dog constructor çalıştı."); } } class Program { static void Main(string[] args) { Dog myDog = new Dog("Karabaş"); } }
Programın Çıktısı
Animal constructor çalıştı. Dog constructor çalıştı.
Metot Overriding (Ezme)
Üst sınıftaki bir metot, alt sınıfta tekrar tanımlanarak değiştirilebilir. Bu işleme method overriding denir.
class Animal { public virtual void MakeSound() { Console.WriteLine("Hayvan ses çıkarıyor."); } } class Dog : Animal { public override void MakeSound() { Console.WriteLine("Köpek havlıyor."); } } 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. } }
Programın Çıktısı
Hayvan ses çıkarıyor. Köpek havlıyor.
Sealed (Kalıtımı Engelleme)
Eğer bir sınıfın başka bir sınıf tarafından miras alınmasını istemiyorsanız sealed
anahtar kelimesini kullanabilirsiniz.
sealed class FinalClass { public void Display() { Console.WriteLine("Bu sınıf devralınamaz."); } } // class Derived : FinalClass // HATA! Sealed sınıf devralınamaz.
Sonuç
Kalıtım, yazılımda kod tekrarını azaltarak, hiyerarşik ve modüler bir yapı sağlar. Üst sınıfın genel özellikleri tüm alt sınıflar tarafından kullanılabilir ve gerektiğinde metotlar ezilerek özelleştirilebilir.