Covariant Return Type Nedir? | Java

Share

Java covariant return type Java 5 ile birlikte hayatımıza giren bir kavram. Bu yazıda, overriding konusunda önemli bir yere sahip olan bu kavramı sizler için izah etmeye çalıştık. İşte covariant return type ile ilgili bilmeniz gerekenler.

Covariant Return Type Nedir?

Polymorphsim en önemli unsurlarından bir tanesi olan Override konusunda, Overrided (parent class’daki asıl metot) ve Overriding (child class’da oluşturulan metot) metodların, isimleri, parametreleri, return type ve access modifier’leri hakkında bazı önemli bilgilere yer vermiştik. Ve bir metot override edilirken, onun ismine, method signature’ına (metot imzası) hiç bir şekilde dokunulamayacağını ifade etmiştik. Bu durum önceleri return type için de geçerliydi. Yani override işlemi yapılırken, return type’ın da iki metodda aynı olması gerekiyordu.

Java 5 ile birlikte bu kural esnetildi. Ve Java artık, sub-class’da oluşturulan overriding metodun return type’nın kısmen de olsa farklı olabileceğini söyledi. Buna göre aralarında child-parent (subclass-super class) ilişkisi olmak kaydı ile yeni oluşturulan metodun return type’ı asıl metoddaki return type’ın child class’larından seçilebilir hale geldi.

Covariant Return Type Örnek

Bir örnekle ifade etmek gerekirse, elimizde Dersler isimli bir parent class var ve bunun içerisinde oluşturduğumuz öğren isimli bir metodumuz var ve bu metodun return type’ı Dersler class’ı olarak seçilmiş. Overriding işlemini gerçekleştirmek istediğimiz sınıf, yani Dersler sınıfının alt sınıfılarından biri olan Matematik sınıfında oluşturduğumuz yeni öğren isimli metodun retun type’ı Dersler olarak seçilebileceği gibi, onun subclass’larından bir tanesi olan Matematik olarak da seçilebilir.

class Dersler {
   Dersler ogren() {
      System.out.println("Dersleri Öğrenelim”);
      return this;
   }
}
public class Matematik extends Dersler {
   Matematik ogren() {
      System.out.println("Matematik Öğren”);
      return this;
   }
   public static void main(String[] args) {
      Dersler mat = new Matematik();
      mat.ogren();

// Output - Matematik Öğren -
   }
}

Buna benzer şekilde farklı Covariant örnekleri yapılabilir.