logo

Kovariantni vrnjeni tipi v Javi

Ko uho »preglasi« bobniče, hitro ugotovimo, da je to mogoče storiti na podlagi različnih podatkovnih vrst ali argumentov, posredovanih funkciji, česar se je programer naučil na začetku med učenjem polimorfizem v Javi.  Pred JDK 5.0 ni bilo mogoče preglasiti metodo s spremembo vrste povratka. Ko preglasimo metodo nadrejenega razreda, morajo biti tipi argumentov imena in povratni tip preglasitvene metode v podrejenem razredu popolnoma enaki kot pri metodi nadrejenega razreda. Prevladujoča metoda naj bi bila invariant glede na vrsto povratka. 

Od različice Java 5.0 naprej je možno imeti različne tipe vrnitve za preglasitveno metodo v podrejenem razredu, vendar mora biti tip vrnitve otroka podtip nadrejenega tipa vrnitve. Prevladujoča metoda postane varianta glede na vrsto povratka.
Kovariantni povratni tip temelji na Načelo zamenjave Liskova .

Zdaj se gotovo sprašujete, zakaj uporabljati geeke, za katere bomo našteli naslednje prednosti:



  • Pomaga pri preprečevanju zmede prisotnih tipov v hierarhiji razredov in tako naredi kodo berljivo uporabno in vzdržljivo.
  • Pri preglasitvi metod imamo svobodo, da imamo bolj specifične vrnjene vrste.
  • Pomoč pri preprečevanju ClassCastExceptions med izvajanjem pri vrnitvah

Opomba: Če zamenjamo povratne vrste Base in Derived, zgornji program ne bo deloval. Prosim glejte to program na primer.

Primer Dva razreda, ki se uporabljata za povratne vrste

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();  } } 

Izhod:  

Base fun() Derived fun()

Ustvari kviz