Efterhånden som øret rammer trommehinder 'tilsidesættende', får vi hurtigt at vide, at det kan gøres enten i kraft af forskellige datatyper eller argumenter videregivet til en funktion, som en programmør lærte i starten, mens han lærte polymorfi i java. Før JDK 5.0 var det ikke muligt at tilsidesætte en metode ved at ændre returtypen. Når vi tilsidesætter en overordnet klassemetode, skal navneargumenttyperne og returtypen for den overordnede metode i underordnet klasse være nøjagtig den samme som for den overordnede klassemetode. Den altoverskyggende metode blev sagt at være invariant med hensyn til returtype.
Java version 5.0 og fremefter er det muligt at have forskellige returtyper for en overordnet metode i den underordnede klasse, men barnets returtype bør være en undertype af forælderens returtype. Den overordnede metode bliver variant med hensyn til returtype.
Kovariant returtypen er baseret på Liskov substitutionsprincippet .
Nu må du undre dig over, hvorfor du skal bruge nørder, som vi vil liste fordelene ned som følger:
- Det hjælper med at undgå forvirrende type casts, der er til stede i klassehierarkiet og dermed gøre koden læsbar brugbar og vedligeholdelig.
- Vi får friheden til at have mere specifikke returtyper, når vi tilsidesætter metoder.
- Hjælp til at forhindre runtime ClassCastExceptions ved returnering
Note: Hvis vi bytter returtyper af Base og Derived, ville ovenstående program ikke fungere. Se venligst denne program for eksempel.
java8 funktioner
Eksempel To klasser bruges til returtyper
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(); } }
Produktion:
Base fun() Derived fun()
Opret quiz