logo

Typy kovariantných návratov v jazyku Java

Keď ucho zasiahne ušné bubienky, rýchlo zistíme, že sa to dá urobiť buď na základe rôznych dátových typov alebo argumentov odovzdaných funkcii, čo sa programátor na začiatku naučil pri učení. polymorfizmus v jave.  Pred JDK 5.0 to nebolo možné prepísať metóda zmenou typu návratu. Keď prepíšeme metódu nadradenej triedy, typ argumentu názvu a typ návratu prepísanej metódy v podradenej triede musia byť presne rovnaké ako pri metóde nadradenej triedy. Vraj bola prvoradá metóda invariantný vzhľadom na typ návratu. 

Java verzie 5.0 a novšej je možné mať rôzne návratové typy pre prepisujúcu metódu v podradenej triede, ale návratový typ podriadeného by mal byť podtypom rodičovského návratového typu. Prvoradou metódou sa stáva variant vzhľadom na typ návratu.
Kovariantný návratový typ je založený na Liskov substitučný princíp .

Teraz vás geekovia musia zaujímať, prečo používať, pre ktoré uvedieme nasledujúce výhody:



  • Pomáha to vyhnúť sa mätúcemu pretypovaniu typov prítomným v hierarchii tried, čím sa kód stáva čitateľným, použiteľným a udržiavateľným.
  • Pri prepisovaní metód si môžeme dovoliť mať špecifickejšie typy návratov.
  • Pomáha pri predchádzaní výnimkám ClassCastExceptions pri návratoch

Poznámka: Ak by sme vymenili návratové typy Base a Derived, potom by vyššie uvedený program nefungoval. Pozrite si prosím toto program napríklad.

Príklad Dve triedy používané pre návratové typy

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

výstup:  

Base fun() Derived fun()

Vytvoriť kvíz