Како ухо удари у бубне опне, брзо смо сазнали да се то може урадити било на основу различитих типова података или аргумената који су прослеђени функцији оно што је програмер у почетку научио док је учио полиморфизам у Јави. Пре ЈДК 5.0 то није било могуће надјачати метод променом типа враћања. Када заменимо метод родитељске класе, типови аргумента имена и тип повратка методе надјачавања у подређеној класи морају бити потпуно исти као и код методе родитељске класе. Речено је да је превасходни метод непроменљива с обзиром на тип повратка.
Јава верзија 5.0 и новије могуће је имати различите типове поврата за метод који заобилази у подређеној класи, али дечји тип враћања треба да буде подтип родитељског типа враћања. Преовлађујућа метода постаје варијанта с обзиром на тип повратка.
Коваријантни тип враћања је заснован на Принцип замене Лискова .
Сада штребери, сигурно се питате зашто да користите за шта ћемо навести предности на следећи начин:
- Помаже да се избегне збуњујућа пребацивања типова присутна у хијерархији класа и на тај начин чини код читљивим употребљивим и одржаваним.
- Добијамо слободу да имамо више специфичних типова враћања када надјачамо методе.
- Помоћ у спречавању извођења ЦлассЦастЕкцептионс приликом враћања
Напомена: Ако заменимо типове враћања Басе и Деривед онда горњи програм не би функционисао. Молим вас погледајте ово програм на пример.
Пример Две класе које се користе за типове враћања
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(); } }
Излаз:
Base fun() Derived fun()
Креирај квиз