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:
- 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.
- Ç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.