Sobes.tech
Middle

Referans tipleri veri türlerinde kalıtım ve çok biçimlilik nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Miras kalıtım, yeni bir sınıfın (alt sınıf, çocuk sınıf) mevcut bir sınıfın (üst sınıf, ana sınıf) alanlarını ve yöntemlerini miras almasını sağlayan bir mekanizmadır. Bu, kodun yeniden kullanılmasını ve sınıf hiyerarşisini teşvik eder.

Polimorfizm (çeşitlilik) ise bir nesnenin birden fazla forma sahip olabilme yeteneğidir. Referans türleri bağlamında, bu, bir üst sınıf değişkeninin alt sınıf nesnesine referans verebileceği anlamına gelir. Bu, farklı alt sınıf nesnelerinin ortak bir arayüz veya üst sınıf aracılığıyla tek tipte işlenmesine olanak tanır.

İki temel polimorfizm türü vardır:

  1. Derleme zamanı (statik polimorfizm): Genellikle metod aşırı yükleme (method overloading) yoluyla elde edilir, bir sınıfta aynı isimde ancak farklı imzalar (parametre sayısı ve/veya tipleri) ile birden fazla yöntem olduğunda.
  2. Çalışma zamanı (dinamik polimorfizm): Metod geçersiz kılma (method overriding) yoluyla elde edilir, alt sınıfın üst sınıfta tanımlanmış bir yöntemi kendi uygulamasıyla sağladığı durumdur. Bu yöntemi üst sınıf referansı üzerinden çağırdığınızda, alt sınıfın uygulaması çalıştırılır (nesne tipi alt sınıf ise).

İşte kalıtım ve dinamik polimorfizme örnek:

// Temel sınıf
class Animal {
    public void makeSound() {
        System.out.println("Genel hayvan sesi");
    }
}

// Alt sınıf
class Dog extends Animal {
    @Override // Yöntem geçersiz kılma
    public void makeSound() {
        System.out.println("Hav!" );
    }
}

// Alt sınıf
class Cat extends Animal {
    @Override // Yöntem geçersiz kılma
    public void makeSound() {
        System.out.println("Miyav!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Statik tip Animal, dinamik tip Dog nesnesi
        Animal myDog = new Dog();
        // Statik tip Animal, dinamik tip Cat nesnesi
        Animal myCat = new Cat();
        // Statik tip Animal, dinamik tip Animal nesnesi
        Animal genericAnimal = new Animal();

        // Polimorfizmin gösterimi
        myDog.makeSound(); // Dog'dan metod çağırır
        myCat.makeSound(); // Cat'den metod çağırır
        genericAnimal.makeSound(); // Animal'den metod çağırır
    }
}

Bu örnekte, Dog ve Cat sınıfları Animal sınıfından türemiştir. myDog, myCat ve genericAnimal değişkenleri statik olarak Animal tipindedir, ancak farklı dinamik tiplere (Dog, Cat, Animal) referans verirler. makeSound() metodunu çağırdığınızda, her referans, nesnenin dinamik tipine bağlı olarak uygun uygulamayı çalıştırır; bu, çalışma zamanında polimorfizmdir.