כאשר תת -סוג מספק יישום ספציפי לשיטה שכבר מוגדרת בכיתת ההורים שלה, היא נקראת שיטה עולה על גבי שיטה. השיטה המוצלחת בתחום המשנה חייבת להיות בעלת פרמטרים של שם זהה וסוג החזרה כשיטה בכיתת האב.
char ל-int java
כללים לבריכת שיטות
- שם פרמטרים וסוג החזרה חייבים להתאים לשיטת האב.
- Java בוחרים איזו שיטה להפעלה בזמן ריצה על סמך סוג האובייקט בפועל ולא רק על סוג משתנה ההתייחסות.
- לא ניתן לעקוף שיטות סטטיות.
- THE @Override ביאור תופס טעויות כמו הקלדות בשמות שיטות.
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.
הֶסבֵּר: מעמד בעלי החיים מגדיר פונקציות בסיס כמו מַהֲלָך() וכן לֶאֱכוֹל() ו מעמד הכלבים יורש מחיה ו עוקף שיטת המהלך () כדי לספק התנהגות ספציפית הכלב רץ. שתי השיעורים יכולים לגשת לשיטות משלהם. בעת יצירת אובייקט כלבים שקורא לקריאה () מבצע את השיטה המותקנת.

מקרים מיוחדים בכיוון
1. קריאה לשיטת הורה באמצעות Super
THE מילת מפתח סופר יכול להפעיל את שיטת מחלקת ההורים מהשיטה העקיפה.
Javaclass 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. לא ניתן לעקוף שיטות סופיות
אם אנחנו לא רוצים ששיטה תסתלק אנו מכריזים עליה כ- סוֹפִי ו אנא ראה באמצעות גמר בירושה ו
Javaclass Parent{ // Can't be overridden final void show(){ } } class Child extends Parent{ // This would produce error void show() {} }
תְפוּקָה :
3. שיטות סטטיות
- לא ניתן לבטל שיטות סטטיות; הגדרת שיטה סטטית בתת -סוג עם אותה חתימה כמו ב- SuperClass מסתרת את שיטת SuperClass.
- ניתן לעקוף שיטות מופע אך תת -סוג אינו יכול לעקוף שיטה סטטית של סופר -קלאס.
- שיטה סטטית בתחום המשנה עם אותה חתימה כמו שיטה סטטית של SuperClass מסתירה את השיטה המקורית.
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. שיטות פרטיות
- לא ניתן לעקוף שיטות פרטיות מכיוון שהן אינן גלויות לתת -סוגים.
- שיטת תת -סוג עם אותו שם מתייחסת כאל שיטה עצמאית חדשה שאינם קשורים למעמד ההורים.
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 ומאפשרת סוגי החזר ספציפיים יותר בתת המשנה.
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.
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 () וקידום () אך ההיגיון שונה לתפקידים שונים כמו מנהל או מהנדס. אנו יכולים ליצור מערך עובדים יחיד בו עובדים בודדים הם מסוגים שונים (טכנולוגיית מכירות וכו ') ולקרוא לפונקציות שלהם. זה מפשט מאוד את הקוד הכללי.
Javaabstract 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 מסוג העובד קורא לשיטות המוגבלות של האובייקטים בפועל בזמן ריצה המדגימה שיגור שיטות דינאמיות (פולימורפיזם של זמן ריצה).
מאמר קשור: עומס יתר ושיטות שיטה