När örat träffar trumhinnorna "överstyrande" får vi snabbt veta att det kan göras antingen på grund av olika datatyper eller argument som skickas till en funktion som en programmerare lärde sig från början när han lärde sig polymorfism i java. Före JDK 5.0 var det inte möjligt att åsidosätta en metod genom att ändra returtyp. När vi åsidosätter en överordnad klassmetod måste namnargumenttyperna och returtypen för den åsidosättande metoden i den underordnade klassen vara exakt samma som för den överordnade klassmetoden. Den överordnade metoden sades vara invariant med avseende på returtyp.
Java version 5.0 och framåt är det möjligt att ha olika returtyper för en överordnad metod i den underordnade klassen men barnets returtyp bör vara en undertyp av förälderns returtyp. Den överordnade metoden blir variant med avseende på returtyp.
Den samvarierande returtypen är baserad på Liskov substitution princip .
Nu måste du undra över varför du ska använda nördar som vi kommer att lista fördelarna för enligt följande:
- Det hjälper till att undvika förvirrande typcasts som finns i klasshierarkin och därmed göra koden läsbar användbar och underhållbar.
- Vi får friheten att ha mer specifika returtyper när vi åsidosätter metoder.
- Hjälp till att förhindra körning av ClassCastExceptions vid returer
Notera: Om vi byter returtyper av Base och Derived så skulle ovanstående program inte fungera. Vänligen se detta program till exempel.
Exempel Två klasser används för 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()
Skapa frågesport