גולש בג'אווה

גולש בג'אווה

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

כללים לבריכת שיטות

  • שם פרמטרים וסוג החזרה חייבים להתאים לשיטת האב.
  • Java בוחרים איזו שיטה להפעלה בזמן ריצה על סמך סוג האובייקט בפועל ולא רק על סוג משתנה ההתייחסות.
  • לא ניתן לעקוף שיטות סטטיות.
  • THE @Override ביאור תופס טעויות כמו הקלדות בשמות שיטות.
Java
   class   Animal     {          void     move  (){      System  .  out  .  println  (      'Animal is moving.'  );             }      void     eat  (){          System  .  out  .  println  (      'Animal is eating.'  );             }   }   class   Dog     extends     Animal  {          @Override     void     move  (){             // move method from Base class is overriden in this      // method      System  .  out  .  println  (  'Dog is running.'  );      }      void     bark  (){          System  .  out  .  println  (  'Dog is barking.'  );             }   }   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      Dog     d     =     new     Dog  ();      d  .  move  ();         d  .  eat  ();         d  .  bark  ();      }   }   

תְפוּקָה
Dog is running. Animal is eating. Dog is barking.  

הֶסבֵּר: מעמד בעלי החיים מגדיר פונקציות בסיס כמו מַהֲלָך() וכן לֶאֱכוֹל() ו מעמד הכלבים יורש מחיה ו עוקף שיטת המהלך () כדי לספק התנהגות ספציפית הכלב רץ. שתי השיעורים יכולים לגשת לשיטות משלהם. בעת יצירת אובייקט כלבים שקורא לקריאה () מבצע את השיטה המותקנת.

שיטה גוברת ב- Java

מקרים מיוחדים בכיוון

1. קריאה לשיטת הורה באמצעות Super

THE מילת מפתח סופר יכול להפעיל את שיטת מחלקת ההורים מהשיטה העקיפה.

Java
   class   Parent  {          void     show  (){          System  .  out  .  println  (  'Parent's show()'  );      }   }   class   Child     extends     Parent  {          @Override      void     show  (){          super  .  show  ();      System  .  out  .  println  (  'Child's show()'  );      }   }   public     class   Main  {          public     static     void     main  (  String  []     args  ){          Parent     obj     =     new     Child  ();      obj  .  show  ();      }   }   

תְפוּקָה
Parent's show() Child's show()  

2.  לא ניתן לעקוף שיטות סופיות

אם אנחנו לא רוצים ששיטה תסתלק אנו מכריזים עליה כ-  סוֹפִי ו אנא ראה  באמצעות גמר בירושה ו 

Java
   class   Parent  {          // Can't be overridden      final     void     show  (){          }   }   class   Child     extends     Parent  {          // This would produce error      void     show  ()     {}   }   


תְפוּקָה :

שיטה

3. שיטות סטטיות

  • לא ניתן לבטל שיטות סטטיות; הגדרת שיטה סטטית בתת -סוג עם אותה חתימה כמו ב- SuperClass מסתרת את שיטת SuperClass.
  • ניתן לעקוף שיטות מופע אך תת -סוג אינו יכול לעקוף שיטה סטטית של סופר -קלאס.
  • שיטה סטטית בתחום המשנה עם אותה חתימה כמו שיטה סטטית של SuperClass מסתירה את השיטה המקורית.
Java
   class   Parent  {      static     void     staticMethod  (){          System  .  out  .  println  (  'Parent static method'  );      }      void     instanceMethod  (){          System  .  out  .  println  (  'Parent instance method'  );      }   }   class   Child     extends     Parent  {          static     void     staticMethod  (){          // Hides Parent's static method      System  .  out  .  println  (  'Child static method'  );      }      @Override      void     instanceMethod  (){             // Overrides Parent's instance method      System  .  out  .  println  (  'Child instance method'  );      }   }   public     class   GFG  {          public     static     void     main  (  String  []     args  ){          Parent     p     =     new     Child  ();          // Calls Parent's static method (hiding)      p  .  staticMethod  ();          // Calls Child's overridden instance method      p  .  instanceMethod  ();         }   }   

תְפוּקָה
Parent static method Child instance method  

4. שיטות פרטיות

  • לא ניתן לעקוף שיטות פרטיות מכיוון שהן אינן גלויות לתת -סוגים.
  • שיטת תת -סוג עם אותו שם מתייחסת כאל שיטה עצמאית חדשה שאינם קשורים למעמד ההורים.
Java
   class   Parent  {          private     void     display  (){          System  .  out  .  println  (  'Parent private method'  );      }   }   class   Child     extends     Parent  {          void     display  (){          // This is a new method not overriding      System  .  out  .  println  (  'Child method'  );      }   }   public     class   GFG  {          public     static     void     main  (  String  []     args  ){          Child     c     =     new     Child  ();          // Calls Child's method      c  .  display  ();         }   }   

תְפוּקָה
Child method  

5. סוגי החזרת קובריאנטיים

  • בשיטה עוקפת את סוג ההחזרה של שיטת העקיפה יכולה להיות תת -סוג של סוג ההחזרה של השיטה המוצלחת.
  • תכונה זו ידועה כסוג החזרה Covariant ומאפשרת סוגי החזר ספציפיים יותר בתת המשנה.
Java
   class   Parent  {          Parent     getObject  (){          System  .  out  .  println  (  'Parent object'  );      return     new     Parent  ();      }   }   class   Child     extends     Parent  {          @Override          // Covariant return type      Child     getObject  ()     {         System  .  out  .  println  (  'Child object'  );      return     new     Child  ();      }   }   public     class   GFG  {          public     static     void     main  (  String  []     args  ){          Parent     obj     =     new     Child  ();          // Calls Child's method      obj  .  getObject  ();             }   }   

תְפוּקָה
Child object  

טיפול חריגים בהכלאה

  • השיטה העקיפה אינה יכולה לזרוק חריגים חדשים או רחבים יותר מאשר השיטה ב- SuperClass.
  • זה יכול לזרוק חריגים פחות או צרים יותר.
  • זה יכול לזרוק כל חריגים שלא נבדקו (כמו RuntimeException) ללא קשר לשיטת Superclass.
Java
   import     java.io.IOException  ;   class   Parent     {      void     display  ()     throws     IOException     {      System  .  out  .  println  (  'Parent method'  );      }   }   class   Child     extends     Parent     {      @Override      void     display  ()     throws     IOException     {      System  .  out  .  println  (  'Child method'  );      }   }   public     class   GFG  {          public     static     void     main  (  String  []     args  ){          // Parent reference Child object      Parent     obj     =     new     Child  ();         try  {          // Calls Child's overridden method      obj  .  display  ();         }     catch     (  IOException     e  ){          System  .  out  .  println  (  'Exception caught: '     +     e  .  getMessage  ());      }      }   }   

תְפוּקָה
Child method  

מדוע אנו משתמשים בשיטות מעבר?

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

דוגמה לחיים אמיתיים: מערכת ניהול עובדים

בואו נבין עקיפה עם אנלוגיה בעולם האמיתי.

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

Java
   abstract     class   Employee     {      abstract     void     raiseSalary  ();      abstract     void     promote  ();   }   class   Manager     extends     Employee  {      @Override     void     raiseSalary  (){          System  .  out  .  println  (      'Manager salary raised with incentives.'  );      }      @Override     void     promote  (){          System  .  out  .  println  (      'Manager promoted to Senior Manager.'  );      }   }   class   Engineer     extends     Employee  {          @Override     void     raiseSalary  (){          System  .  out  .  println  (      'Engineer salary raised with bonus.'  );      }      @Override     void     promote  (){          System  .  out  .  println  (      'Engineer promoted to Senior Engineer.'  );      }   }   public     class   Company  {          public     static     void     main  (  String  []     args  ){          Employee  []     employees      =     {     new     Manager  ()     new     Engineer  ()     };      System  .  out  .  println  (  '--- Raising Salaries ---'  );      for     (  Employee     e     :     employees  ){          e  .  raiseSalary  ();         }      System  .  out  .  println  (  'n--- Promotions ---'  );      for     (  Employee     e     :     employees  )     {      e  .  promote  ();      }      }   }   

תְפוּקָה
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer.  

הֶסבֵּר: למרות שאובייקטים של מנהל וגם מהנדס מכונים באמצעות Java מסוג העובד קורא לשיטות המוגבלות של האובייקטים בפועל בזמן ריצה המדגימה שיגור שיטות דינאמיות (פולימורפיזם של זמן ריצה).

מאמר קשור: עומס יתר ושיטות שיטה