logo

Types de retour covariants en Java

Au fur et à mesure que l'oreille frappe les tympans, nous apprenons rapidement que cela peut être fait soit en vertu de différents types de données, soit en raison d'arguments transmis à une fonction, ce qu'un programmeur a appris initialement en apprenant. polymorphisme en Java.  Avant JDK 5.0, il n'était pas possible de outrepasser une méthode en changeant le type de retour. Lorsque nous remplaçons une méthode de classe parent, les types d'arguments de nom et le type de retour de la méthode de substitution dans la classe enfant doivent être exactement les mêmes que ceux de la méthode de classe parent. On a dit que la méthode primordiale était invariant en ce qui concerne le type de retour. 

À partir de la version Java 5.0, il est possible d'avoir différents types de retour pour une méthode de substitution dans la classe enfant, mais le type de retour de l'enfant doit être un sous-type du type de retour du parent. La méthode primordiale devient variante en ce qui concerne le type de retour.
Le type de retour covariant est basé sur le Principe de substitution de Liskov .

Maintenant, geeks, vous devez vous demander pourquoi utiliser ce dont nous allons énumérer les avantages comme suit :



  • Cela permet d'éviter les conversions de types confuses présentes dans la hiérarchie des classes et de rendre ainsi le code lisible, utilisable et maintenable.
  • Nous avons la liberté d’avoir des types de retour plus spécifiques lors du remplacement des méthodes.
  • Aide pour empêcher les ClassCastExceptions d'exécution lors des retours

Note: Si nous échangeons les types de retour Base et Derived, le programme ci-dessus ne fonctionnera pas. S'il vous plaît voir ce programme par exemple.

Exemple Deux classes utilisées pour les types de retour

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

Sortir:  

Base fun() Derived fun()

Créer un quiz