Non appena l'orecchio colpisce i timpani con la "prevalenza", capiamo subito che può essere fatto in virtù di diversi tipi di dati o argomenti passati a una funzione ciò che un programmatore ha imparato inizialmente mentre imparava polimorfismo in Java. Prima di JDK 5.0 non era possibile farlo sovrascrivere un metodo modificando il tipo restituito. Quando sovrascriviamo un metodo della classe genitore, i tipi di argomento del nome e il tipo restituito del metodo di override nella classe figlia devono essere esattamente uguali a quelli del metodo della classe genitore. Si diceva che il metodo prevalente fosse invariante rispetto al tipo di reso.
Dalla versione Java 5.0 in poi è possibile avere tipi restituiti diversi per un metodo di override nella classe figlia, ma il tipo restituito del figlio dovrebbe essere un sottotipo del tipo restituito del genitore. Il metodo prioritario diventa variante rispetto al tipo di reso.
Il tipo restituito co-variante è basato su Principio di sostituzione di Liskov .
Ora, geek, ti starai chiedendo perché utilizzarlo e elencheremo i vantaggi come segue:
- Aiuta a evitare di confondere i cast di tipi presenti nella gerarchia delle classi e quindi a rendere il codice leggibile, utilizzabile e manutenibile.
- Abbiamo la libertà di avere tipi di restituzione più specifici durante l'override dei metodi.
- Aiuta a prevenire ClassCastException in fase di esecuzione sui resi
Nota: Se scambiassimo i tipi di rendimento Base e Derivato, il programma precedente non funzionerebbe. Per favore vedi Questo programma per esempio.
Esempio Due classi utilizzate per i tipi restituiti
funzionamento interno di hashmapJava
// 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(); } }
Produzione:
Base fun() Derived fun()
Crea quiz