שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2024 - ירושה
נתון הקוד הבא:
מה יודפס אם נריץ את הקוד הנ״ל?
סמנו את התשובה הנכונה ביותר.
א. (משמאל לימין): 0010
ב. (משמאל לימין): 0011
ג. (משמאל לימין): 0110
ד. (משמאל לימין): 0111
נמקו את כל התשובות סימנתםן.
מה יודפס אם נריץ את הקוד הנ״ל?
סמנו את התשובה הנכונה ביותר.
א. (משמאל לימין): 0010
ב. (משמאל לימין): 0011
ג. (משמאל לימין): 0110
ד. (משמאל לימין): 0111
נמקו את כל התשובות סימנתםן.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2024סמסטר א
★★★★★
ירושהפולימורפיזםcastingמעקב אחר קודהסתרת שדות
בניגוד למתודות שעוברות דריסה (overriding), הגישה לשדות (fields) ב-Java נקבעת בזמן קומפילציה לפי טיפוס המצביע, ולא בזמן ריצה לפי טיפוס האובייקט.
התשובה הנכונה היא א'. הפלט שיתקבל הוא
1.
המשתנה
2.
המשתנה
3.
המשתנה
4.
כאן, המצביע
לסיכום, סדר ההדפסות הוא
0010. נסביר מדוע:1.
System.out.println(aa.x);המשתנה
aa הוא מצביע (reference) מטיפוס A המצביע על אובייקט מטיפוס A. לכן, הגישה aa.x מתייחסת לשדה x שהוגדר במחלקה A, וערכו הוא 0. יודפס: 0.2.
System.out.println(ab.x);המשתנה
ab הוא מצביע מטיפוס A המצביע על אובייקט מטיפוס B (מצב של פולימורפיזם). ב-Java, בניגוד לדריסת מתודות (Overriding), הגישה לשדות (fields) נקבעת על פי טיפוס המצביע בזמן קומפילציה, ולא על פי טיפוס האובייקט בזמן ריצה. מכיוון שהמצביע ab הוא מטיפוס A, הביטוי ab.x יגש לשדה x שהוגדר במחלקה A. תופעה זו נקראת הסתרת שדות (field hiding). לכן, יודפס ערך השדה x של A, שהוא 0.3.
System.out.println(bb.x);המשתנה
bb הוא מצביע מטיפוס B המצביע על אובייקט מטיפוס B. לכן, הגישה bb.x מתייחסת לשדה x שהוגדר במחלקה B, וערכו הוא 1. יודפס: 1.4.
System.out.println( ((A)bb).x );כאן, המצביע
bb (שטיפוסו B) עובר המרת טיפוס (casting) לטיפוס A. כעת, המצביע מתנהג כאילו הוא מטיפוס A. שוב, מכיוון שהגישה לשדות נקבעת לפי טיפוס המצביע, הביטוי ((A)bb).x יגש לשדה x של המחלקה A, וערכו הוא 0. יודפס: 0.לסיכום, סדר ההדפסות הוא
0, 0, 1, 0.