A mesura que l'orella colpeja els timpans "anulant" ràpidament sabem que es pot fer en virtut de diferents tipus de dades o d'arguments passats a una funció el que un programador va aprendre inicialment mentre aprenia. polimorfisme en java. Abans de JDK 5.0 no era possible anul·lar un mètode canviant el tipus de retorn. Quan substituïm un mètode de classe pare, els tipus d'argument del nom i el tipus de retorn del mètode de substitució a la classe fill han de ser exactament iguals que els del mètode de classe pare. Es deia que el mètode principal era invariant pel que fa al tipus de retorn.
A partir de la versió 5.0 de Java, és possible tenir diferents tipus de retorn per a un mètode de substitució a la classe fill, però el tipus de retorn del fill hauria de ser un subtipus del tipus de retorn del pare. El mètode primordial esdevé variant pel que fa al tipus de retorn.
El tipus de retorn covariant es basa en el Principi de substitució de Liskov .
Ara, geeks, us haureu de preguntar per què utilitzar-lo, per la qual cosa anirem enumerant els avantatges de la següent manera:
- Ajuda a evitar càrregues de tipus confuses presents a la jerarquia de classes i, per tant, fer que el codi sigui llegible i es pugui mantenir.
- Tenim la llibertat de tenir tipus de retorn més específics quan substituïm mètodes.
- Ajuda a prevenir ClassCastExceptions en temps d'execució a les devolucions
Nota: Si intercanviem els tipus de retorn de Base i Derivat, el programa anterior no funcionarà. Si us plau, mireu això programa per exemple.
Exemple Dues classes utilitzades per als tipus de retorn
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(); } }
Sortida:
Base fun() Derived fun()
Crea un qüestionari