Java Covariant Return Type ( Eşdeğişken Geri Dönüş Türü )

Java 1.5’den önce superclass a ait bir metodu override etmek istediğimizde override ettiğimiz metod adı, parametre tipleri, ve dönüş tipi bire bir aynı olmak zorunda idi. Java 1.5 ile birlikte alt sınıfta override edilen metodun dönüş tipi esnetilerek superclassın alt bir sınıfı olmasına izin verildi.

Java’da tanımlanan herhangi bir metod “void” ile tanımlanmadığı sürece bir değer döndürmek zorunda. Eğer metodumuzun bir değer geriye döndürmesini istiyorsak metodumuzu tanımlarken geri dönüş tipini belirtmemiz ve metod içerisinde “return” ifadesini kullanmamız gerekiyor. Son olarak tanımladığımız geri dönüş tipi ile metod içerisinde “return” ile döndürdüğümüz veri tipinin uyumlu olması gerektiğini de unutmayalım. (Geri dönüş tipini Integer tanımladığımızda Boolean bir değer tabii ki döndüremeyiz! )

// dikdörtgenin alanını hesaplayan bir metod
    public int getArea() {
        return width * height;
    }

Bu örnekte olduğu gibi her zaman primitive veri tipinde bir değer döndürmek zorunda değiliz. Geri dönüş değeri olarak reference type dediğimiz türde değerlerde döndürülebilir. Primitive ve Reference Tipleri hakkında detaylı bilgiye buradan ulaşılabilir.

İşte bu noktada yani bir metoda dönüş değeri olarak sınıf  adı verdiğimizde  metod içerisinde geri dönüş yaptığımız değer (nesne)  dönüş değeri olarak belirttiğimiz  sınıfın bir alt sınıfı ya da kendisinden olmak zorunda.

Object -> Sayi -> Asal Sayi şeklinde sınıf hiyerarşisine (class hierarchy) sahip  bir yapımız olduğunu varsayalım. Ve Sayi tipinde değer döndüren returnSayi isimli bir metod tanımladık.

public Sayi returnSayi() {
    ...
}

Tanımladığımız returnSayi metodunu Sayı sınıfının bir alt sınıfı olan Asalsayi veri tipinde değişken döndürecek şekilde yeniden tanımlayabiliyoruz. İşte bu şekilde tanımlı bir metodun dönüş değerinin bir alt sınıfı olarak yeniden tanımlanarak override edilerek kullanılmasına “covariant return type” adı veriliyor.

public AsalSayi returnSayi() {
    ...
}

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir