logo

Covariantní návratové typy v Javě

Když ucho narazí na ušní bubínky, rychle zjistíme, že to lze provést buď pomocí různých datových typů, nebo argumentů předávaných funkci, co se programátor zpočátku naučil, když se učil. polymorfismus v Javě.  Před JDK 5.0 to nebylo možné přepsat metoda změnou návratového typu. Když přepíšeme metodu rodičovské třídy, typy argumentů názvu a návratový typ metody přepisování v podřízené třídě musí být přesně stejné jako u metody rodičovské třídy. Převažující metoda prý byla invariantní s ohledem na návratový typ. 

Java verze 5.0 a novější je možné mít různé návratové typy pro přepisující metodu v podřízené třídě, ale návratový typ potomka by měl být podtypem návratového typu rodiče. Převažující metodou se stává varianta s ohledem na návratový typ.
Kovariantní návratový typ je založen na Liskovský princip substituce .

Nyní si geekové musíte klást otázku, proč používat, pro které uvádíme následující výhody:



  • Pomáhá to vyhnout se matoucím přetypováním typů přítomným v hierarchii tříd, a tím učinit kód čitelným, použitelným a udržovatelným.
  • Při přepisování metod máme možnost mít konkrétnější typy návratů.
  • Pomoc při předcházení výjimkám ClassCastExceptions při vracení za běhu

Poznámka: Pokud bychom zaměnili návratové typy Base a Derived, pak by výše uvedený program nefungoval. Podívejte se prosím tento program například.

Příklad Dvě třídy používané pro 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()

Vytvořit kvíz