Ettersom øret treffer trommehinnene 'overstyrer', får vi raskt vite at det kan gjøres enten i kraft av forskjellige datatyper eller argumenter som overføres til en funksjon som en programmerer lærte i utgangspunktet mens han lærte polymorfisme i java. Før JDK 5.0 var det ikke mulig å overstyre en metode ved å endre returtype. Når vi overstyrer en overordnet klassemetode, må navneargumenttypene og returtypen for den overordnede metoden i barneklassen være nøyaktig de samme som for den overordnede klassemetoden. Den overordnede metoden ble sagt å være invariant med hensyn til returtype.
Java versjon 5.0 og utover er det mulig å ha forskjellige returtyper for en overordnet metode i barneklassen, men barnets returtype bør være en undertype av overordnets returtype. Den overordnede metoden blir variant med hensyn til returtype.
Kovariant returtype er basert på Liskov substitusjonsprinsipp .
Nå lurer du kanskje på hvorfor du skal bruke det, og vi vil liste opp fordelene som følger:
- Det hjelper å unngå forvirrende type casts som finnes i klassehierarkiet og dermed gjøre koden lesbar brukbar og vedlikeholdbar.
- Vi får frihet til å ha mer spesifikke returtyper ved overstyring av metoder.
- Hjelp til å forhindre kjøring av ClassCastExceptions på returer
Note: Hvis vi bytter returtyper av Base og Derived, vil programmet ovenfor ikke fungere. Vennligst se dette program for eksempel.
typescript datotype
Eksempel To klasser brukt for 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(); } }
Produksjon:
Base fun() Derived fun()
Lag quiz