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) במקום זה שהתקבל.
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 : A {
public B (int i) : base (i + 1) { }
public bool Foo (Object myObject) {
Console.WriteLine ("Foo1");
return ((myObject is B) && (this.i == ((B)myObject).i));
}
public virtual bool Foo (B myB, int num) {
Console.WriteLine ("Foo2");
return (this.i + myB.i) < num;
}
}
-----------------------------------------------------------------------------------------------
public class C : B {
public C (int i) : base (i) { }
public bool Foo (int num) {
Console.WriteLine ("Foo3");
return (this.i != num);
}
}
-----------------------------------------------------------------------------------------------
public class D : B {
public D (int i) : base (i * 2) { }
public override bool Foo (B myB, int num) {
Console.WriteLine ("Foo4");
return base.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 . יש לסמן ירושה באמצעות החץ ◁——— .
נתונה המחלקה Tester : [הקוד ב-code_context] סרטטו את העצמים שנוצרו בפעולה main .
במקום המסומן ב־*** נוסף קטע הקוד התקין שלפניכם: 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) כתבו את הפלט של הפעולה (כתבו את מספר השורה המשויך לכל פלט).
Console.WriteLine (c.Foo(5)); //(1) Console.WriteLine (d.Foo(a)); //(2) Console.WriteLine (bd.Foo(b)); //(3) Console.WriteLine (bd.Foo(b, 1)); //(4) Console.WriteLine (((C)ac).Foo(c)); //(5)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.