אתם מתרגלים שאלה מתוך מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנהמבחן 2021 · קיץ מועד א · שאלה 5כל שאלות המבחן ←
תכנות מונחה עצמיםפולימורפיזם ומחלקות מופשטות

B יורשת מ-A ודורסת f ו-g. A.g קוראת ל-f() על this (קריאה וירטואלית — מתפזרת לגרסה של B בזמן ריצה, לפי הטיפוס האמיתי, לא המוצהר). B.superG עוקפת את הדריסה במפורש עם super.g() וקוראת דווקא לגרסת A של g — אבל בתוכה, ה-f() הפנימית עדיין וירטואלית ומתפזרת ל-B.f.

class A{
    public void f() {
        System.out.println("A.f");
    }
    public void g() {
        f();
    }
}
public class B extends A{
    public void f(){
        System.out.println("B.f");
    }
    public void g() {
        System.out.println("B.g");
    }
    public void superG() {
        super.g();
    }
}
סעיף א

נתון קטע הקוד הבא: A a = new A(); B b = new B(); A ab = new B(); a.f(); ab.f(); b.f(); a.g(); ab.g(); b.g(); ((B)(ab)).superG(); b.superG(); עקבו אחרי ביצוע קטע הקוד ורשמו מה יהיה הפלט.

סעיף ב

האם אפשר להוסיף לקטע הקוד את שתי הפקודות הבאות? a.superG(); ((B)a).superG(); הסבירו את תשובתכם.

שאלות ותגובות על השאלה

🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות

שאלו כאן — ותקבלו מענה מוסמך.

🎓 מרצה לתכנות עונה כאן — תקבלו מענה מקצועי