logo

Kovarijantni povratni tipovi u Javi

Dok uho udara o bubnjiće 'prevladavajući', brzo shvaćamo da se to može učiniti pomoću različitih tipova podataka ili argumenata proslijeđenih funkciji što je programer naučio u početku dok je učio polimorfizam u Javi.  Prije JDK 5.0 nije bilo moguće nadjačati metoda promjenom vrste povrata. Kada nadjačavamo metodu nadređene klase, tipovi argumenata imena i povratni tip nadjačavajuće metode u podređenoj klasi moraju biti potpuno isti kao kod metode nadređene klase. Rečeno je da je najvažnija metoda nepromjenjiv s obzirom na vrstu povrata. 

Od verzije Java 5.0 nadalje moguće je imati različite povratne tipove za nadjačavajuću metodu u podređenoj klasi, ali podređeni povratni tip treba biti podtip nadređenog povratnog tipa. Prevladavajuća metoda postaje varijanta s obzirom na vrstu povrata.
Vrsta povrata kovarijante temelji se na Princip Liskovljeve supstitucije .

Sada se sigurno pitate geekovi zašto koristiti, a mi ćemo navesti prednosti kako slijedi:



  • Pomaže u izbjegavanju zbunjujućih odljeva tipa koji su prisutni u hijerarhiji klasa i tako čini kod čitljivim upotrebljivim i održavanim.
  • Dobivamo slobodu imati specifičnije tipove povrata kada nadjačavamo metode.
  • Pomoć u sprječavanju ClassCastExceptions tijekom izvođenja pri vraćanju

Bilješka: Ako zamijenimo povratne tipove Base i Derived tada gornji program ne bi radio. Molimo pogledajte ovaj program na primjer.

Primjer Dvije klase koje se koriste za povratne tipove

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

Izlaz:  

Base fun() Derived fun()

Napravi kviz