שלושה סעיפים בלתי-תלויים: (א) שרשרת קריאה משתמעת ל-super() כאשר B יורשת מ-A בלי בנאי מפורש ב-A; (ב) גישת protected דרך שתי רמות ירושה (C יורשת מ-B, B יורשת מ-A); (ג) מסקנות מוכרחות מכך שהשורה ((A)b).myFun() עוברת קומפילציה.
שלושה סעיפים בלתי-תלויים: (א) שרשרת קריאה משתמעת ל-super() כאשר B יורשת מ-A בלי בנאי מפורש ב-A; (ב) גישת protected דרך שתי רמות ירושה (C יורשת מ-B, B יורשת מ-A); (ג) מסקנות מוכרחות מכך שהשורה ((A)b).myFun() עוברת קומפילציה.
public class A{
}
public class B : A{
public B(){
Console.WriteLine("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.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.