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