Sobes.tech
Junior

Programlamada override (geçersiz kılma) nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Yöntem Geçersiz Kılma (Overriding), bir alt sınıfın, zaten ana sınıfında tanımlanmış bir yöntemin kendi uygulamasını sağlayabilme yeteneğidir. Geçersiz kılınan yöntemin (isim, parametre sayısı ve tipleri) imzası, alt sınıfta ana sınıfındaki yöntemle tamamen aynı olmalıdır. Dönüşüm tipi de ya aynı olmalı ya da ana sınıfın yönteminin kovaryantı (alt tipi) olmalıdır.

Geçersiz kılmanın temel yönleri:

  • Miras: Geçersiz kılma, yalnızca miras ilişkileri bağlamında mümkündür; burada alt sınıf, ana sınıftan bir yöntem miras alır.
  • Polimorfizm: Geçersiz kılma, çalışma zamanında (runtime polymorphism) polimorfizmin uygulanmasında kullanılan mekanizmalardan biridir. Bu, nesnenin gerçek türüne bağlı olarak, ana türe referans aracılığıyla çağrıldığında, uygun yöntem uygulamasının gerçekleştirileceği anlamına gelir (ya ana sınıfın ya da alt sınıfın yöntemi).
  • @Override anahtar kelimesi: Bazı dillerde (örneğin Java) @Override anotasyonu kullanılır. Bu, geçersiz kılmanın doğru çalışması için zorunlu değildir, ancak kodun okunabilirliğini artırmak ve yöntemin geçersiz kılma kurallarına uymaması durumunda derleyici hatalarını önlemek için önerilir.
  • Ana sınıf yöntemine erişim: Alt sınıfta geçersiz kılınan yöntem içinde, genellikle aynı yöntemin ana sınıftaki uygulamasını çağırmak gerekir. Bunun için super anahtar kelimesi kullanılır (örneğin, super.metod()).

Java örneği:

// Ana sınıf
class Animal {
    // Ana sınıftaki yöntem
    void makeSound() {
        System.out.println("Hayvan ses çıkarır");
    }
}

// Animal'den kalıtım alan alt sınıf
class Dog extends Animal {
    // makeSound() yönteminin geçersiz kılınması
    @Override
    void makeSound() {
        System.out.println("Hav hav!");
    }

    // Ana sınıf yöntemini çağırma örneği
    void eat() {
        System.out.println("Köpek yiyor.");
        super.makeSound(); // Ana sınıfın yöntemini çağırır
    }
}

class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myDog = new Dog(); // Polimorfizm

        myAnimal.makeSound(); // Çıktı: Hayvan ses çıkarır
        myDog.makeSound();   // Çıktı: Hav hav! (Geçersiz kılınmış yöntem çağrısı)

        Dog specificDog = new Dog();
        specificDog.eat(); // Çıktı: Köpek yiyor. 
                          // Hayvan ses çıkarır
    }
}

Python örneği:

# Ana sınıf
class Animal:
    # Ana sınıftaki yöntem
    def make_sound(self):
        print("Hayvan ses çıkarır")

# Animal'den kalıtım alan alt sınıf
class Dog(Animal):
    # make_sound() yönteminin geçersiz kılınması
    def make_sound(self):
        print("Hav hav!")

    # Ana sınıf yöntemini çağırma örneği
    def eat(self):
        print("Köpek yiyor.")
        super().make_sound() # Ana sınıfın yöntemini çağırır

# Gösterim
yeni_hayvan = Animal()
yeni_kopek = Dog() # Polimorfizm

ny_hayvan.make_sound() # Çıktı: Hayvan ses çıkarır
ny_kopek.make_sound()   # Çıktı: Hav hav!

ozel_kopek = Dog()
ozel_kopek.eat() # Çıktı: Köpek yiyor. 
                   # Hayvan ses çıkarır

Geçersiz kılma, temel sınıfın davranışını, alt sınıfın özgüllüklerine uyacak şekilde uyarlamak için kullanılır ve genel arayüz korunur. Nesne yönelimli tasarımın temel öğesidir.