logo

סוגי החזרות קווריאנטיות ב-Java

כאשר האוזן פוגעת בעור התוף 'עוקפת', אנו מבינים במהירות שניתן לעשות זאת מכוח סוגי נתונים שונים או טיעונים המועברים לפונקציה מה שמתכנת למד בתחילה תוך כדי למידה פולימורפיזם בג'אווה.  לפני JDK 5.0 זה לא היה אפשרי לעקוף שיטה על ידי שינוי סוג ההחזרה. כאשר אנו עוקפים שיטת מחלקה אב, סוגי הארגומנטים של השם וסוג ההחזרה של שיטת העוקף במחלקת הילד צריכים להיות זהים בדיוק לזה של שיטת מחלקת האב. נאמר ששיטת העקיפה היא בלתי משתנה ביחס לסוג ההחזרה. 

Java מגרסה 5.0 ואילך אפשר לקבל סוגי החזרה שונים עבור שיטה עוקפת במחלקת הילד אך סוג ההחזרה של הילד צריך להיות תת סוג של סוג ההחזרה של האב. שיטת העקיפה הופכת גִרְסָה אַחֶרֶת ביחס לסוג ההחזרה.
סוג ההחזרה ה-co-variant מבוסס על עקרון החלפת ליסקוב .

עכשיו גיקים אתם ודאי תוהים למה להשתמש בהם נפרט את היתרונות כדלקמן:



  • זה עוזר להימנע מהטלות מבלבלות הקיימות בהיררכיית המחלקות ובכך להפוך את הקוד לקריא שמיש וניתן לתחזוקה.
  • אנו מקבלים את החופש לקבל סוגי החזרה ספציפיים יותר בעת עקיפת שיטות.
  • עזרה במניעת ClassCastExceptions בזמן ריצה בהחזרות

פֶּתֶק: אם נחליף סוגי החזרה של Base ו-Derivate אז התוכנית לעיל לא תעבוד. אנא ראה זֶה תוכנית למשל.

דוּגמָה שתי מחלקות המשמשות לסוגי החזרה

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

תְפוּקָה:  

Base fun() Derived fun()

צור חידון