java
public class A{ } public class B extends A{ public B(){ System.out.println("B constructor"); } }
סעיף א
נתונות שתי המחלקות A, B (ראו קוד לעיל). לפניכם ארבעה היגדים. קבעו לגבי כל אחד מהם אם הוא נכון או אינו נכון, ונמקו את קביעתכם:
- הבנאי של B יקרא לבנאי הריק של A (בנאי ללא פרמטרים, בנאי ברירת מחדל).
- הבנאי הריק של Object לא ייקרא כי ל-A אין זימון מפורש של בנאי זה.
- הבנאי הריק של Object ייקרא לאחר הדפסת המחרוזת "B constructor".
- הבנאי הריק של B יקרא לבנאי הריק של A ואז תודפס המחרוזת.
סעיף ב
נתונות שלוש מחלקות A, B ו-C, כאשר מחלקה B יורשת מהמחלקה A והמחלקה C יורשת מהמחלקה B. כמו כן נתון שלמחלקה A מוגדרת התכונה value. לפניכם ארבעה היגדים. קבעו לגבי כל אחד מהם אם הוא נכון או אינו נכון, ונמקו את קביעתכם:
- מתוך המחלקה C אין גישה לתכונה value של המחלקה A, אפילו ש-value מוגדרת כ-protected, מכיוון שמדובר בשתי רמות של ירושה.
- מתוך המחלקה C יש גישה לתכונה value רק בתנאי שהתכונה value במחלקה A מוגדרת כ-protected.
- מתוך המחלקה C יש גישה לתכונה value של המחלקה A באמצעות הפקודה super.super.value.
- מתוך המחלקה C יש גישה לתכונה value מכיוון שהמחלקה C יורשת בעקיפין מהמחלקה A, בלי קשר להרשאת הגישה של התכונה.
סעיף ג
נתונה הפקודה הבאה (העוברת שלב קומפילציה):
((A)b).myFun();
כאשר b הוא מצביע מסוג המחלקה B. לפניכם ארבעה היגדים. קבעו לגבי כל אחד מהם אם הוא נכון או אינו נכון, ונמקו את קביעתכם:
- הפעולה myFun מוגדרת במחלקה A.
- B היא מחלקה היורשת את המחלקה A.
- A היא מחלקה היורשת את המחלקה B.
- הפעולה myFun מוגדרת גם במחלקה A וגם במחלקה B.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.