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

(METHOD) בג'אווה, איזו מן המתודות הבאות תעבור בהורשה לתתי-מחלקות (subclasses)?

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


.1 private void doSomething()
.2 public final String asString()

.3 public MyClass(int i)

.4 כל התשובות האחרות אינן נכונות
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד ב2019סמסטר ב
ירושהOverridingהסתרת מידעקונסטרוקטורמחלקות
יש להבחין בין היכולת לרשת מתודה לבין היכולת לדרוס אותה. מתודה יכולה לעבור בירושה גם אם לא ניתן לדרוס אותה.
התשובה הנכונה היא 2.

ננתח כל אחת מהאפשרויות:


1. private void doSomething(): מתודות המוגדרות כ-private הן חלק ממנגנון הסתרת המידע ושייכות אך ורק למחלקה בה הן הוגדרו. הן אינן גלויות ואינן נגישות לתתי-מחלקות, ולכן אינן עוברות בירושה. תת-מחלקה יכולה להגדיר מתודה משלה עם אותה חתימה, אך זו תהיה מתודה חדשה לחלוטין ולא דריסה של מתודת האב.


2. public final String asString(): מתודות public עוברות בירושה לתתי-המחלקות. המילה השמורה final מציינת כי לא ניתן לדרוס (לבצע Overriding) את המתודה הזו בתת-המחלקה. עם זאת, המתודה עצמה כן עוברת בירושה, ותת-המחלקה יכולה לקרוא לה ולהשתמש בה כפי שהיא. לכן, זו התשובה הנכונה.


3. public MyClass(int i): זוהי הגדרה של קונסטרוקטור (בנאי). קונסטרוקטורים אינם עוברים בירושה. תפקידם הוא לאתחל אובייקט מהמחלקה הספציפית בה הם מוגדרים. תת-מחלקה אחראית להגדיר את הקונסטרוקטורים שלה בעצמה, והיא יכולה (ולרוב חייבת) לקרוא לקונסטרוקטור של מחלקת האב באמצעות super().


4. כל התשובות האחרות אינן נכונות: מכיוון שתשובה 2 נכונה, תשובה זו אינה נכונה.