אתם מתרגלים שאלה מתוך בגרות מדעי המחשב — מבני נתונים (שאלון 899271)מבחן 2025 · קיץ מועד א · שאלה 12כל שאלות המבחן ←
תכנות מונחה עצמיםירושה

A היא מחלקת-הבסיס: שדה מוגן i ובנאי שמקבל אותו. B יורשת מ-A (מוסיפה 1 ל-i בקריאה ל-super/base) ומגדירה שתי גרסאות עמוסות (overload, לא דריסה) של foo: foo(Object) - לא וירטואלית - ו-foo(B,int) - מסומנת virtual וניתנת לדריסה. C יורשת מ-B (משאירה את i כפי שהוא) ומוסיפה foo(int) - עוד עומס עצמאי. D יורשת מ-B (מכפילה את i פי 2) ודורסת (override) את foo(B,int), וקוראת בתוכה ל-super/base.foo עם הפרמטר num קבוע (20) במקום זה שהתקבל.

public class A {
    protected int i;
    public A (int i) { this.i = i; }
}
-----------------------------------------------------------------------------------------------
public class B extends A {
    public B (int i) { super (i + 1); }
    public  boolean foo (Object myObject)  {
        System.out.println ("foo1");
        return ((myObject instanceof B) && (this.i == ((B)myObject).i));
    }
    public boolean foo (B myB, int num)  {
        System.out.println ("foo2");
        return (this.i +  myB.i)  <  num;
    }
}
-----------------------------------------------------------------------------------------------
public class C extends B {
    public C (int i)  { super (i); }
    public boolean foo (int num)  {
        System.out.println ("foo3");
        return (this.i != num);
    }
}
-----------------------------------------------------------------------------------------------
public class D extends B {
    public D (int i)  { super (i * 2); }
    public boolean foo (B myB, int num)    {
        System.out.println ("foo4");
        return super.foo (myB, 20);
    }
}

// --- המחלקה Tester (סעיף ב) ---
public class Tester {
    public static void main (String[] args) {
        A a = new A (1);
        B b = new B (2);
        C c = new C (3);
        D d = new D (4);
        B bd = new D (5);
        A ac = new C (6);
        //***
    }
}
סעיף א

סרטטו את תרשים ההייררכייה של המחלקות A , B , C , D . יש לסמן ירושה באמצעות החץ ◁——— .

סעיף ב(1)

נתונה המחלקה Tester : [הקוד ב-code_context] סרטטו את העצמים שנוצרו בפעולה main .

סעיף ב(2)

במקום המסומן ב־*** נוסף קטע הקוד התקין שלפניכם: System.out.println (c.foo(5)); //(1) System.out.println (d.foo(a)); //(2) System.out.println (bd.foo(b)); //(3) System.out.println (bd.foo(b, 1)); //(4) System.out.println (((C)ac).foo(c)); //(5) כתבו את הפלט של הפעולה (כתבו את מספר השורה המשויך לכל פלט).

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

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

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

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