logo

Ковариантни връщани типове в Java

Тъй като ухото удря тъпанчетата на ухото, ние бързо разбираме, че това може да се направи или чрез различни типове данни, или аргументи, предадени на функция, което програмистът е научил първоначално, докато е учел полиморфизъм в java.  Преди JDK 5.0 не беше възможно отмени метод чрез промяна на типа на връщане. Когато заместваме метод на родителски клас, типовете аргументи на името и типът на връщане на заместващия метод в дъщерния клас трябва да бъдат точно същите като тези на метода на родителския клас. Твърди се, че основният метод е инвариант по отношение на типа връщане. 

Java версия 5.0 нататък е възможно да има различни типове връщане за заместващ метод в дъщерния клас, но типът връщане на детето трябва да бъде подтип на типа връщане на родителя. Основният метод става вариант по отношение на типа връщане.
Ковариантният тип връщане се основава на Принцип на заместване на Лисков .

Сега, маниаци, сигурно се чудите защо да използвате, за което ще изброим предимствата, както следва:



  • Това помага да се избегнат объркващи кастинги на типове, присъстващи в йерархията на класовете, и по този начин прави кода четим, използваем и поддържаем.
  • Получаваме свободата да имаме по-специфични типове връщане, когато заместваме методи.
  • Помощ за предотвратяване на ClassCastExceptions по време на изпълнение при връщания

Забележка: Ако разменим върнатите типове на Base и Derived, тогава горната програма няма да работи. Моля вижте това програма например.

Пример Два класа, използвани за типове връщане

tcp и ip модел
Java
// Java Program to Demonstrate Different Return Types // if Return Type in Overridden method is Sub-type // Class 1 class A { } // Class 2 class B extends A { } // Class 3 // Helper class (Base class) class Base {  // Method of this class of class1 return type  A fun()  {  // Display message only  System.out.println('Base fun()');  return new A();  } } // Class 4 // Helper class extending above class class Derived extends Base {  // Method of this class of class1 return type  B fun()  {  // Display message only  System.out.println('Derived fun()');  return new B();  } } // Class 5 // Main class public class GFG {  // Main driver method  public static void main(String args[])  {  // Creating object of class3 type  Base base = new Base();  // Calling method fun() over this object  // inside main() method  base.fun();  // Creating object of class4 type  Derived derived = new Derived();  // Again calling method fun() over this object  // inside main() method  derived.fun();  } } 

Изход:  

Base fun() Derived fun()

Създаване на тест