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 (finalJava'da,sealedC#'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.