Sobes.tech
Middle

Metot geçersiz kılma (Overriding) ne zaman gerçekleşir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Nesne yönelimli programlamada yöntem geçersiz kılma (Overriding), alt sınıfın, ana sınıfındaki aynı isim, parametre listesi (imza) ve dönüş tipiyle aynı olan bir yöntemi sahip olması durumudur. Bu, alt sınıfın, kalıtılan yöntemin kendi uygulamasını sağlamasına olanak tanır.

Geçersiz kılma için temel koşullar:

  • Kalıtım: Alt sınıf, ana sınıftan kalıtım almalıdır.
  • Yöntem imzası: Alt sınıfta geçersiz kılınan yöntem, aynı imzaya (yöntem adı ve parametre türleri listesi, sırası ve sayısı) sahip olmalıdır; bazı dillerde (örneğin Java) dönüş tipi de uyumlu olmalıdır veya kovaryant olmalıdır.
  • Erişim belirteçleri: Alt sınıfta geçersiz kılınan yöntemin erişim belirteci, ana sınıftaki yöntemden daha kısıtlayıcı olamaz.
  • Geçersiz kılınmaması gerekenler: Statik (static), son (final Java'da, sealed C#'ta) ve özel (private) yöntemler, kalıtım yoluyla çok biçimlilikte yer almazlar.

Java örneği:

// Ana sınıf
class Animal {
    public void sound() {
        // Varsayılan uygulama
        System.out.println("Hayvan ses çıkarır");
    }
}

// Alt sınıf, sound() yöntemini geçersiz kılar
class Dog extends Animal {
    @Override // Derleyici kontrolü için anotasyon
    public void sound() {
        // Dog için özgü uygulama
        System.out.println("Köpek havlar");
    }
}

class Main {
    public static void main(String[] args) {
        Animal benimHayvanım = new Animal();
        Animal benimKöpeğim = new Dog(); // Çok biçimlilik
        Dog benimKöpeğim2 = new Dog();

        benimHayvanım.sound();      // Animal'dan sound() çağırır
        benimKöpeğim.sound();        // Dog'dan geçersiz kılınmış sound() çağırır (çok biçimlilik sayesinde)
        benimKöpeğim2.sound();       // Dog'dan geçersiz kılınmış sound() çağırır
    }
}

Python örneği:

# Ana sınıf
class Animal:
    def sound(self):
        # Varsayılan uygulama
        print("Hayvan ses çıkarır")

# Alt sınıf, sound() yöntemini geçersiz kılar
class Dog(Animal):
    def sound(self):
        # Dog için özgü uygulama
        print("Köpek havlar")

# Kullanım
benim_hayvanım = Animal()
benim_köpeğim = Dog() # Çok biçimlilik
benim_köpeğim2 = Dog()

benim_hayvanım.sound()       # Animal'dan çağırır
benim_köpeğim.sound()        # Dog'dan geçersiz kılınmış sound() çağırır (çok biçimlilik sayesinde)
benim_köpeğim2.sound()       # Dog'dan geçersiz kılınmış sound() çağırır

Geçersiz kılma, çalışma zamanında çok biçimliliği sağlamak için kullanılır ve gerçek nesne türüne bağlı olarak farklı işlemler yapmaya olanak tanır, ana sınıfa referans kullanmaya rağmen. Bu, esnek ve genişletilebilir sistemler oluşturmak için nesne yönelimli programlamanın temel ilkelerinden biridir.