שלוש מחלקות B, C, D (C extends B, D extends B). ל-C יש דריסה של equals(Object) (מ-Object); ל-D יש העמסה חדשה equals(D) שאינה דורסת את equals(Object) המובנית. סעיפים ב'-ג' מתבססים על הפעולה הראשית של Program.
שלוש מחלקות B, C, D (C extends B, D extends B). ל-C יש דריסה של equals(Object) (מ-Object); ל-D יש העמסה חדשה equals(D) שאינה דורסת את equals(Object) המובנית. סעיפים ב'-ג' מתבססים על הפעולה הראשית של Program.
public class B {
protected int num;
public B(int num) { this.num = num; }
} // end of B
public class C : B {
public C(int num) : base(num) { }
public override bool Equals(Object other) {
return ((other != null) && (other is C) && (num == ((C) other).num));
}
} // end of C
public class D : B {
public D(int num) : base(num + 1) { }
public bool Equals(D other) {
return ((other != null) && (num == other.num));
}
} // end of D
הפעולה הראשית של Program — 6 השורות הראשונות זהות בכל סעיפי ג'; השורה (*****) מוחלפת בכל פעם באחת מארבע שורות הקוד (הסעיפים אינם קשורים זה לזה).
public class Program {
public static void main(String[] args) {
B b = new B(1);
C c = new C(1);
D d = new D(1);
B b1 = new D(1);
Object c1 = new C(1);
Object d1 = new D(1);
(*****)
}
}
סעיף א
האם קיימת דריסה (overriding) או העמסה (overloading) של הפעולות? הסבירו את תשובתכם.
סעיף ב
עקבו אחרי ביצועה (הפעולה הראשית שבאיור) וציינו מהם העצמים שנוצרו. עבור כל עצם יש להציג את ערך תכונת ה-num שלו.
סעיף ג
בכל אחד מהסעיפים הבאים השורה (*****) תוחלף בשורת קוד משורות הקוד 1-4. כתבו בעבור כל אחד מהסעיפים מה יהיה הפלט ואיזו מהפעולות Equals תופעל. שימו לב שאין קשר בין הסעיפים!
- Console.WriteLine(b1.Equals(b));
- Console.WriteLine(c1.Equals(c));
- Console.WriteLine(d1.Equals(d));
- Console.WriteLine(d.Equals((D)d1));
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.