Dok uho udara o bubnjiće 'prevladavajući', brzo shvaćamo da se to može učiniti pomoću različitih tipova podataka ili argumenata proslijeđenih funkciji što je programer naučio u početku dok je učio polimorfizam u Javi. Prije JDK 5.0 nije bilo moguće nadjačati metoda promjenom vrste povrata. Kada nadjačavamo metodu nadređene klase, tipovi argumenata imena i povratni tip nadjačavajuće metode u podređenoj klasi moraju biti potpuno isti kao kod metode nadređene klase. Rečeno je da je najvažnija metoda nepromjenjiv s obzirom na vrstu povrata.
Od verzije Java 5.0 nadalje moguće je imati različite povratne tipove za nadjačavajuću metodu u podređenoj klasi, ali podređeni povratni tip treba biti podtip nadređenog povratnog tipa. Prevladavajuća metoda postaje varijanta s obzirom na vrstu povrata.
Vrsta povrata kovarijante temelji se na Princip Liskovljeve supstitucije .
Sada se sigurno pitate geekovi zašto koristiti, a mi ćemo navesti prednosti kako slijedi:
- Pomaže u izbjegavanju zbunjujućih odljeva tipa koji su prisutni u hijerarhiji klasa i tako čini kod čitljivim upotrebljivim i održavanim.
- Dobivamo slobodu imati specifičnije tipove povrata kada nadjačavamo metode.
- Pomoć u sprječavanju ClassCastExceptions tijekom izvođenja pri vraćanju
Bilješka: Ako zamijenimo povratne tipove Base i Derived tada gornji program ne bi radio. Molimo pogledajte ovaj program na primjer.
Primjer Dvije klase koje se koriste za povratne tipove
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(); } }
Izlaz:
Base fun() Derived fun()
Napravi kviz