לפניך חמש מחלקות A,B,C,D,E: A היא הבסיס עם שדה מוגן x ופעולות getX/foo; B יורשת מ-A וגוברת (override) על foo; C יורשת מ-B, גוברת שוב על foo ומוסיפה פעולה חדשה bar; D ו-E שתיהן יורשות מ-C: D גוברת שוב על foo ומשנה את x בבנאים שלה, E גוברת רק על bar. שרשרת קריאות super() מקשרת את כל הבנאים יחד.
לפניך חמש מחלקות A,B,C,D,E: A היא הבסיס עם שדה מוגן x ופעולות getX/foo; B יורשת מ-A וגוברת (override) על foo; C יורשת מ-B, גוברת שוב על foo ומוסיפה פעולה חדשה bar; D ו-E שתיהן יורשות מ-C: D גוברת שוב על foo ומשנה את x בבנאים שלה, E גוברת רק על bar. שרשרת קריאות super() מקשרת את כל הבנאים יחד.
public class A
{
protected int x;
public A() { this.x = 9; Console.WriteLine("A. x = " + this.x); }
public A(int x) { this.x = x; Console.WriteLine("A. x = " + this.x); }
public int GetX() { return this.x; }
public virtual int Foo() { return this.x; }
}
public class B : A
{
public B() : base() { }
public B(int x) : base(x) { }
public override int Foo() { return this.x + 1; }
}
public class C : B
{
public C() : base() { }
public C(int x) : base(x) { }
public override int Foo() { return this.x + 2; }
public virtual int Bar() { return this.x; }
}
public class D : C
{
public D() : base() { this.x++; Console.WriteLine("D. x = " + this.x); }
public D(int x) : base(x) { Console.WriteLine("D. x = " + this.x); }
public D(int x, int y) : base() { this.x = this.x + x + y; Console.WriteLine("D. x = " + this.x); }
public override int Foo() { return this.x - 1; }
}
public class E : C
{
public E() : base() { }
public override int Bar() { return this.x + 1; }
}
סרטט תרשים היררכייה בין המחלקות A,B,C,D,E. יש לסמן ירושה ממחלקה באמצעות החץ ←.
לפניך כותרת הפעולה: public static int getType (Object m). הפעולה מחזירה 1 אם m מטיפוס A, 2 אם m מטיפוס B, 3 אם m מטיפוס C, 4 אם m מטיפוס D, ו-5 אם m מטיפוס E. ממש את הפעולה. הדרכה: כדי לבדוק את סוג העצם יש להיעזר בפעולות getX, bar, foo. אין להשתמש בפעולה instanceof ובפעולות של המחלקה Object, ואין לשנות את המחלקות A,B,C,D,E. הנח ש-m שייך לאחת מן המחלקות A,B,C,D,E ואינו null.
public static int GetType (Object m)
לפניך המחלקה Tester: public class Tester { public static void main (String[] args) { A a1 = new B(); A a2 = new E(); A a3 = new D(); A a4 = new D(5); A a5 = new D(3, 7); } } כתוב את הפלט של הפעולה main.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.