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

Father מגדירה smile/run; Son יורשת ודורסת את שתיהן, מוסיפה work; GrandSon יורשת מ-Son, דורסת smile/run (לא work), מוסיפה play. כל שלוש הסעיפים בודקים הכרעת compile-time מול runtime.

public class Father {

    public Father() {
    }
    public void smile() {
        System.out.println("Father is smiling");
    }
    public void run() {
        System.out.println("Father is running");
    }
}

public class Son extends Father {

    public Son() {
        super();
    }
    public void smile() {
        System.out.println("Son is smiling");
    }
    public void run() {
        System.out.println("Son is running");
    }
    public void work() {
        System.out.println("Son is working");
    }
}

public class GrandSon extends Son {

    public GrandSon() {
        super();
    }
    public void smile() {
        System.out.println("GrandSon is smiling");
    }
    public void run() {
        System.out.println("GrandSon is running");
    }
    public void play() {
        System.out.println("GrandSon is playing");
    }
}
סעיף א

עבור כל אחד משלושת קטעי הקוד הבאים, רשמו אם הוא תקין או לא. אם הקוד תקין – ציינו מה יהיה הפלט, אם הקוד אינו תקין – הסבירו מהו סוג השגיאה (שגיאת קומפילציה או שגיאת זמן ריצה).

  1. Father f = (Son)(new GrandSon());
  2. Object o = new Son(); Father f = o;
  3. Father f = new Father(); Object o = f; GrandSon gs = (GrandSon)o;
סעיף ב

עבור כל אחד מחמשת קטעי הקוד הבאים רשמו אם הוא תקין או לא. אם הקוד תקין – ציינו מה יהיה הפלט, אם הקוד אינו תקין – הסבירו מהו סוג השגיאה (שגיאת קומפילציה או שגיאת זמן ריצה).

  1. Son s = new Father(); s.smile();
  2. Father f = new Son(); f.smile();
  3. Father f = new Son(); f.work();
  4. Son s = new GrandSon(); s.play();
  5. Father f = new GrandSon(); f.smile();
סעיף ג

עקבו אחרי קטע קוד הבא ורשמו מה יהיה הפלט. Father[] f = new Father[3]; f[0] = new Father(); f[1] = new Son(); f[2] = new GrandSon(); for (int i = 0; i < f.length; i++) if (f[i] instanceof Son) ((Son)f[i]).Run();

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

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

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

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