logo

Коваријантни типови поврата у Јави

Како ухо удари у бубне опне, брзо смо сазнали да се то може урадити било на основу различитих типова података или аргумената који су прослеђени функцији оно што је програмер у почетку научио док је учио полиморфизам у Јави.  Пре ЈДК 5.0 то није било могуће надјачати метод променом типа враћања. Када заменимо метод родитељске класе, типови аргумента имена и тип повратка методе надјачавања у подређеној класи морају бити потпуно исти као и код методе родитељске класе. Речено је да је превасходни метод непроменљива с обзиром на тип повратка. 

Јава верзија 5.0 и новије могуће је имати различите типове поврата за метод који заобилази у подређеној класи, али дечји тип враћања треба да буде подтип родитељског типа враћања. Преовлађујућа метода постаје варијанта с обзиром на тип повратка.
Коваријантни тип враћања је заснован на Принцип замене Лискова .

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



  • Помаже да се избегне збуњујућа пребацивања типова присутна у хијерархији класа и на тај начин чини код читљивим употребљивим и одржаваним.
  • Добијамо слободу да имамо више специфичних типова враћања када надјачамо методе.
  • Помоћ у спречавању извођења ЦлассЦастЕкцептионс приликом враћања

Напомена: Ако заменимо типове враћања Басе и Деривед онда горњи програм не би функционисао. Молим вас погледајте ово програм на пример.

Пример Две класе које се користе за типове враћања

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()

Креирај квиз