במהלך הירושה, כאשר יש להגדרת שיטהאותה חתימת שיטה (שם שיטה + חתימת פרמטר) וסוג החזרה בתת-משנה כמו זו של מחלקת העל שלה, אז אומרים שהשיטה בתת-משנה דורסת את השיטה של מחלקת העל שלה והמנגנון נקרא שיטה Overriding.
לאחר שנוצר אובייקט של תת המשנה, מתיהשיטה המוחלטת נקראת אז אובייקט תת-קלאס מתייחס לשיטה המוגדרת בתת-המשנה שאמורה משמעותה שהשיטה המוחלטת שהוגדרה במחלקת העל תוסתר. על מנת לגשת לשיטה המוחלטת המוגדרת במחלקת העל ניתן לגשת לתת המשנה באמצעות מילת המפתח 'סופר'.
ב- OOPs, עקיפת שיטות היא תכונה המאפשרתתת המשנה מגדירה יישום ספציפי של השיטה המוגדרת כבר באחת משיעורי העל שלה. בין השיטות המוחלטות, איזו גרסה של השיטה תיקרא נקבעת על ידי האובייקט המזמין בזמן ריצה. לזה קוראים לזה פולימורפיזם בזמן ריצה כאשר שיטות עקיפות מיישמות היבט "ממשק אחד, שימוש מרובה" בפולימורפיזם.
בנטרול שיטה, מערכת זמן ריצה של Java פותרת את קריאת השיטה באופן דינמי בזמן ריצה, מה שנקרא כריכה מאוחרת.
תכונות של עקיפה בשיטה
- רמת הגישה של שיטת העקיפה בתת-משנה אינה יכולה להיות מגבילה יותר מהשיטה המוחלטת של מחלקת העל.
- השיטות ייאמרו כי הן גוברות זו על זו כאשר יש קשר בין הורה לילד בין השיעורים.
- לא ניתן לבטל שיטות פרטיות וסופיות.
- לא ניתן לדרוס שיטות סטטיות אך ניתן להכריז עליהן מחדש.
- ניתן לבטל שיטות ציבוריות או מוגנות שאינן סופיות של חבילה רק על ידי תת המשנה שלה הקיים בחבילה אחרת אחרת.
- אי אפשר לבטל את הבנאים.
- עקיפה יכולה לזרוק כל חריג שאינו מסומן.
יתרונות
תומך בהתמחות, כלומר במהלך ירושה כאשר תת-משנה יורשת כיתת הורים, אז תת-המחלקה תכלול את כל התכונות של כיתת-הורה ובחלק העליון של אותה תת-תחום תוכל ליישם פונקציונליות ספציפית לשיטה העקרונית עם חתימת שיטה זהה וסוג החזרה זהה לזה שבמחלקת העל שלה.
תוכנית Java
class Animal{ void sound(){ System.out.println("default sound..."); } } class Cat extends Animal{ void sound(){ System.out.println("mew mew..."); } } class Dog extends Animal{ void sound(){ System.out.println("vow vow..."); } } class MethodOverrideDemo{ public static void main(String args[]){ Cat cat = new Cat(); Dog dog = new Dog(); System.out.println("--------Cat--------"); cat.sound(); System.out.println("--------Dog--------"); dog.sound(); } }
תפוקה
הסבר על קוד ופלט
בדוגמה המפורטת לעיל, שניהם כלב וחתולתת-קטגוריות שמקורן בשיעור העל של בעלי החיים. בכל השיעורים (למעט שיטת MethodOverrideDemo) תוכלו למצוא את צליל השיטה (), המוגדר תחת כיתת בעלי חיים בצורה כללית ובשיעור חתול וכלב גבר על שיטת הצליל () של כיתת בעלי חיים עם יישום ספציפי לפי תרחיש . ברור שהצליל של חתול הוא "מיו מיו ..." וצליל "הנדר ..." של הכלב () מוגדר בשיעורים אלה לפי הצורך. אם אנו יוצרים אובייקט של Class Cat, אז זה יפעיל שיטת צליל () של Class Cat, הדבר נכון גם לאובייקט של Class Class. אני מניח מהפלט הכל ברור.
עיין במדריכי הלימוד וההנחיות המוחלטות לתכנות ג'אווה כאן.
הערות