A ו-B בירושה עם מונים סטטיים countA/countB, דריסת toString ו-same (שוויון מותאם-אישית לפי תכונה שונה בכל מחלקה). שני סעיפי מעקב: קטע קצר על same הא-סימטרית, ותוכנית main מלאה עם מערך עצמים, תא שנשאר ריק, ובנאי B(int) שבכוונה אינו מפעיל Math.abs.
A ו-B בירושה עם מונים סטטיים countA/countB, דריסת toString ו-same (שוויון מותאם-אישית לפי תכונה שונה בכל מחלקה). שני סעיפי מעקב: קטע קצר על same הא-סימטרית, ותוכנית main מלאה עם מערך עצמים, תא שנשאר ריק, ובנאי B(int) שבכוונה אינו מפעיל Math.abs.
public class A {
public static int countA = 0;
private string st;
public A() { this.st = "aaa"; countA++;}
public A(string st) { this.st = st; countA++;}
public override string ToString() { return this.st; }
public virtual bool Same (Object obj) {
if ((obj is A) && (((A)obj).st.Equals(this.st)))
return true;
return false;
}
}
//end of class A
public class B : A {
public static int countB = 0;
private int num;
public B(): base() {
this.num = 1;
countB++;
}
public B(int num): base() {
this.num = num;
countB++;
}
public B(int num, string st): base(st) {
this.num = Math.Abs(num);
countB++;
}
public override string ToString() {
string s = this.num +"/";
for(int i = 0; i< this.num; i++)
s+= base.ToString();
return s;
}
public override bool Same (Object obj) {
if ((obj is B) && (((B)obj).num == this.num))
return true;
return false;
}
} //end of class B
לפניכם קטע קוד מהתוכנית הראשית: A a = new A(); B b = new B(); if (a.same(b)) System.out.println(a); else System.out.println(b); if (b.same(a)) System.out.println(b); else System.out.println(a); מה יהיה הפלט של קטע התוכנית? הסבירו את תשובתכם.
נתונה המחלקה Tester הבאה: public class Tester { public static void print (Object[] arr) { for (int i = 0; i < arr.length; i++) { if (arr[i] != null) { if (arr[i] instanceof B) System.out.println("B: " + arr[i]); else if (arr[i] instanceof A) System.out.println("A: " + arr[i]); else System.out.println("Unknown"); } else System.out.println("NULL"); } } public static void main (String[] args) { A[] ar1 = new A[7]; ar1[0] = new B(-4); ar1[1] = new A("bbb"); ar1[2] = new B(3,"ccc"); ar1[3] = new B(); ar1[4] = new B(2, "ddd"); ar1[5] = new A(); print(ar1); System.out.println(A.countA+ " "+ B.countB); } } //end of class Tester עקבו אחרי ביצוע תוכנית הראשית (main) ורשמו מה יהיה פלט התוכנית. יש להציג את התכונות של כל העצמים שנוצרו במהלך ביצוע התוכנית.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.