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.
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. }
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 } }
Karabaş yemek yiyor. Karabaş havlıyor.
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ş"); } }
Animal constructor çalıştı. Dog constructor çalıştı.
Ü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. } }
Hayvan ses çıkarıyor. Köpek havlıyor.
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.
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.