logo

Kovariantin palautustyypit Javassa

Kun korva osui tärykalvoon "syrjäyttäen", saamme nopeasti tietää, että se voidaan tehdä joko erilaisten tietotyyppien tai argumenttien avulla, jotka välitetään funktiolle, jonka ohjelmoija oppi alun perin oppiessaan polymorfismi javassa.  Ennen JDK 5.0:ta se ei ollut mahdollista ohittaa menetelmä muuttamalla palautustyyppiä. Kun ohitamme yläluokan menetelmän, nimiargumenttityyppien ja ohittavan menetelmän paluutyypin tulee olla täsmälleen samat kuin emoluokan menetelmän. Ylivoimainen menetelmä sanottiin olevan muuttumaton palautustyypin suhteen. 

Java-versiosta 5.0 alkaen on mahdollista käyttää erilaisia ​​palautustyyppejä ohittavalle menetelmälle lapsiluokassa, mutta lapsen palautustyypin tulee olla vanhemman palautustyypin alatyyppi. Ylivoimaiseksi menetelmäksi tulee variantti palautustyypin suhteen.
Kovariantin palautustyyppi perustuu Liskov-korvausperiaate .

Nyt nörteillä sinun täytyy ihmetellä, miksi käyttää, jonka edut luetellaan seuraavasti:



  • Se auttaa välttämään hämmentäviä tyyppiheittoja luokkahierarkiassa ja siten tekemään koodista luettavan käyttökelpoisen ja ylläpidettävän.
  • Saamme vapauden käyttää tarkempia palautustyyppejä ohittaessamme menetelmiä.
  • Auta estämään ajonaikaisia ​​ClassCastExceptions-tapauksia palautuksissa

Huomautus: Jos vaihdamme Base- ja Derived-palautustyypit, yllä oleva ohjelma ei toimisi. Katso tämä ohjelma esimerkiksi.

Esimerkki Palautustyypeissä käytetään kahta luokkaa

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

Lähtö:  

Base fun() Derived fun()

Luo tietokilpailu