סעיף א': קטע קוד מופשט 'A x = new B(t, s); h.g(n, d);' שרץ ללא שגיאות — שישה היגדים כלליים לבדוק. סעיף ב' (אין קשר לסעיף א'): מחלקה A עם a1()/a2() (a2 קוראת ל-a1), מחלקה B יורשת מ-A ודורסת את a1 להדפיס "Bye B" — מה מדפיסה a2 על עצם B?
סעיף א': קטע קוד מופשט 'A x = new B(t, s); h.g(n, d);' שרץ ללא שגיאות — שישה היגדים כלליים לבדוק. סעיף ב' (אין קשר לסעיף א'): מחלקה A עם a1()/a2() (a2 קוראת ל-a1), מחלקה B יורשת מ-A ודורסת את a1 להדפיס "Bye B" — מה מדפיסה a2 על עצם B?
public class A {
protected void a1() {
System.out.println("Hello A");
}
protected void a2() {
a1();
}
}
public class B extends A {
protected void a1() {
System.out.println("Bye B");
}
}
סעיף א
נתון קטע קוד שרץ ללא שגיאות:
A x = new B(t, s);
h.g(n, d);
עבור כל אחד מההיגדים 1-6 ציינו האם הוא נכון או אינו נכון. הסבירו את תשובתכם.
- הפעולה g חייבת להיות ציבורית (public).
- t הוא בהכרח משתנה מטיפוס פשוט (כמו: int, double וכד').
- h הוא בהכרח אובייקט.
- d יכול להיות שם של פעולה.
- B היא בהכרח מחלקה שיורשת מ-A (גם אם לא ישירות).
- ייתכן ש-A היא מחלקה שיורשת מ-B.
סעיף ב
(אין קשר לסעיף א') נתונה המחלקה A הבאה (a1 מדפיסה "Hello A"; a2 קוראת ל-a1). בקובץ נפרד, הגדירו מחלקה נוספת B שיורשת מהמחלקה A. במחלקה B ביצעו דריסה לפעולה a1 והיא מדפיסה "Bye B". מה יקרה אם נפעיל על אובייקט מסוג B את הפעולה a2?
- הפלט יהיה: Hello A
- הפלט יהיה: Bye B
- הפלט יהיה: Hello A / Bye B
- הפלט יהיה: Bye B / Hello A
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.