logo

Tipuri de returnare covariante în Java

Pe măsură ce timpanele lovite de ureche „depășesc” ajungem rapid să știm că se poate face fie în virtutea diferitelor tipuri de date, fie în argumente transmise unei funcții, ceea ce un programator a învățat inițial în timp ce învață. polimorfism în java.  Înainte de JDK 5.0 nu era posibil suprascrie o metodă prin schimbarea tipului de returnare. Când suprascriem o metodă de clasă părinte, tipurile de argument de nume și tipul de returnare ale metodei de suprascriere în clasa copil trebuie să fie exact aceleași cu cele ale metodei clasei părinte. S-a spus că metoda primordială este invariant în ceea ce privește tipul de returnare. 

Versiunea Java 5.0 ulterioară este posibil să existe diferite tipuri de returnare pentru o metodă de suprascriere în clasa copil, dar tipul de returnare al copilului ar trebui să fie un subtip al tipului de returnare al părintelui. Metoda primordială devine variantă în ceea ce privește tipul de returnare.
Tipul de returnare covariantă se bazează pe Principiul substituției Liskov .

Acum, geek, trebuie să vă întrebați de ce să folosiți pentru care vom enumera avantajele după cum urmează:



  • Ajută la evitarea modelelor de tip confuze prezente în ierarhia clasei și, astfel, face ca codul să fie lizibil, utilizabil și întreținut.
  • Avem libertatea de a avea tipuri de returnări mai specifice atunci când suprascriem metode.
  • Ajută la prevenirea ClassCastExceptions în timpul rulării la returnări

Nota: Dacă schimbăm tipurile de returnare de bază și derivate, atunci programul de mai sus nu ar funcționa. Vă rog să vedeți acest program de exemplu.

Exemplu Două clase utilizate pentru tipurile de returnare

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

Ieșire:  

Base fun() Derived fun()

Creați un test