שלוש מחלקות A→B→C עם מונים סטטיים נפרדים (countA/countB/countC), שדה הכלה (myA בתוך C), ובנאי B(int y) שאינו קורא super(x) במפורש (מלכודת). ארבעה סעיפי מעקב על אותו קטע קוד בסיס.
שלוש מחלקות A→B→C עם מונים סטטיים נפרדים (countA/countB/countC), שדה הכלה (myA בתוך C), ובנאי B(int y) שאינו קורא super(x) במפורש (מלכודת). ארבעה סעיפי מעקב על אותו קטע קוד בסיס.
public class A
{
private static int countA = 0;
protected int x;
public A()
{
countA++;
this.x = 0;
}
public A(int x)
{
countA++;
this.x = x;
}
public String toString()
{
return "A:"+this.x;
}
public int doIt(int z)
{
return this.x * z;
}
public static int getCount(){ return countA; }
}// end of class A
public class B extends A
{
protected int y;
private static int countB = 0;
public B(int y)
{
this.y = y;
countB++;
}
public B(int x, int y)
{
super(x);
countB++;
this.y = y;
}
public String toString()
{
return "B:"+super.toString()+":"+this.y;
}
public static int getCount(){return countB;}
public int doIt(int z)
{
return super.doIt(z) + this.y;
}
} //end of class B
public class C extends B
{
private A myA;
private static int countC = 0;
public C(int x, int y)
{
super(x, y);
this.myA = new A(x+y);
countC++;
}
public static int getCount(){return countC;}
public String toString()
{
return "C:"+super.toString()+" ["+this.myA+"]";
}
}// end of class C
ציירו תרשים UML שמייצג את הקשרים בין המחלקות A, B, C. יש לסמן ירושה באמצעות החץ (▷—) והכלה באמצעות הסימן (◆—).
נתון קטע קוד בפעולה הראשית במחלקה אחרת: A[] arr = new A[5]; arr[0] = new A(13); arr[1] = new B(5, 10); arr[2] = new C(2, 7); arr[3] = new C(3, 3); arr[4] = new B(5); עקבו אחרי ביצוע קטע קוד. יש לצייר את כל העצמים שנוצרו ולציין ערכי התכונות שלהם.
לקוד של סעיף ב' התווסף קוד הבא: System.out.println("A objects: " + A.getCount()); System.out.println("B objects: " + B.getCount()); System.out.println("C objects: " + C.getCount()); רשמו מה יהיה הפלט.
לקוד של סעיף ב' התווסף קוד הבא: for (int k=0; k <arr.length; k++) System.out.println(arr[k]); רשמו מה יהיה הפלט.
לקוד של סעיף ב' התווסף קוד הבא: for (int k=0; k <arr.length; k++) if(arr[k] instanceof B) System.out.println(arr[k].doIt(k+1)); רשמו מה יהיה הפלט.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.