שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2019 - מחלקות

מה נכון לגבי מתודה m שהגדרנו כ-protected final במחלקה A, ביחס לתתי-מחלקות (subclasses) של A?

1. ניתן לקרוא ל-m רק מתוך גוף המחלקה A, כיוון שתתי-מחלקות לא יורשות את m.
2. ניתן לקרוא ל-m מתוך גוף המחלקה A או מתוך תתי-מחלקות, ואם יש לה ערך החזרה הוא יהיה עצם מקובע (immutable).

3. ניתן לקרוא ל-m מכל מחלקה, ותתי-מחלקות לא יכולות לשנות את טיפוס ערך ההחזרה להיות כללי יותר.

4. ניתן לקרוא ל-m מתוך גוף המחלקה A או מתוך תתי-מחלקות, ותתי-המחלקות לא יכולות לדרוס את m.

5. ניתן לקרוא ל-m רק מתוך גוף המחלקה A, ותתי-מחלקות לא יכולות לשנות את טיפוס ערך ההחזרה להיות כללי יותר.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2019סמסטר ב
מחלקותירושהOverridingהסתרת מידע
נתחו בנפרד את המשמעות של כל אחת מהמילים השמורות protected ו-final בהקשר של מתודות, הרשאות גישה וירושה.
התשובה הנכונה היא 4.
ננתח את המשמעות של כל מילה שמורה בהגדרת המתודה:

* `protected`: זוהי הרשאת גישה (access modifier). מתודה המוגדרת כ-protected נגישה מתוך המחלקה שבה היא הוגדרה (המחלקה A), מכל המחלקות באותה החבילה (package), וחשוב מכל - מתתי-מחלקות של A, גם אם הן נמצאות בחבילה אחרת. לכן, החלק הראשון של תשובה 4, "ניתן לקרוא ל-m מתוך גוף המחלקה A או מתוך תתי-מחלקות", הוא נכון.

* `final`: כאשר מילה שמורה זו מצורפת לחתימה של מתודה, היא מונעת דריסה (Overriding) של המתודה בתתי-מחלקות. כלומר, תת-מחלקה של A יורשת את המתודה m כפי שהיא, אך אינה יכולה לספק לה מימוש חדש. לכן, החלק השני של תשובה 4, "ותתי-המחלקות לא יכולות לדרוס את m", הוא נכון.


שילוב שתי המשמעויות מוביל למסקנה שתשובה 4 היא היחידה שמתארת במדויק את המצב: הגישה למתודה מותרת לתתי-מחלקות (בזכות protected), אך שינוי התנהגותה באמצעות דריסה נאסר עליהן (בזכות final).