שאלת מבחן בתכנות מונחה עצמים - אוניברסיטת בר-אילן 2023 - קונסטרוקטור

בג'אווה, האם בנאים עוברים בהורשה? בחרו בתשובה הנכונה ביותר.

.1 לא, מן העובדה שבנאים נקראים לפני שנוצר עצם נובע שהם למעשה מתודות סטטיות השייכות למחלקה, ולכן אינן עוברות בהורשה
.2 לא, כל מחלקה מגדירה בנאים שמאתחלים את השדות שלה ויש מנגנון המחייב קריאה לבנאי המחלקות במעלה ההיררכיה כדי להבטיח כי השדות של כל אחת מהן מאותחלים

.3 כן, מטרת מנגנון ההורשה היא בין היתר שיתוף קוד בין מחלקות, וזה נכון גם לגבי קוד של בנאים

.4 אותם כללים של אילו מתודות עוברות בהורשה חלים גם על בנאים, למשל, בנאי פומבי=public יכול לעבור בהורשה בעוד שבנאי פרטי=private לא יעבור בהורשה
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2023סמסטר ב
קונסטרוקטורירושהמחלקותאובייקטים
חשבו על תהליך יצירת אובייקט של מחלקה יורשת. אילו חלקים של האובייקט צריכים להיות מאותחלים, ובאיזה סדר?
התשובה הנכונה היא 2.

בנאים (Constructors) אינם עוברים בירושה. הסיבה לכך נעוצה בתפקידם הייחודי: לאתחל את המצב (השדות) של אובייקט ממחלקה ספציפית. כאשר יוצרים אובייקט של מחלקה יורשת (subclass), האובייקט הזה מכיל בתוכו גם את כל השדות שהוגדרו במחלקת האב (superclass) ובכל המחלקות שמעליה בהיררכיית הירושה.


כדי להבטיח שכל חלקי האובייקט מאותחלים כראוי, ג'אווה מחייבת שבנאי של מחלקה יורשת יקרא לבנאי של מחלקת האב שלו. קריאה זו מתבצעת באמצעות המילה השמורה super() והיא חייבת להיות הפקודה הראשונה בבנאי של המחלקה היורשת. אם המתכנת לא כותב קריאה מפורשת ל-super(), הקומפיילר מוסיף אוטומטית קריאה לבנאי הדיפולטיבי (ללא ארגומנטים) של מחלקת האב. מנגנון זה מבטיח אתחול שרשרת, מהמחלקה הגבוהה ביותר בהיררכיה (Object) ועד למחלקה הספציפית שממנה יוצרים את האובייקט. לכן, כל מחלקה אחראית על אתחול השדות שלה באמצעות הבנאים שלה, והם אינם "נורשים" על ידי מחלקות הבן.


נבחן את שאר האפשרויות:
1. הטענה שבנאים הם מתודות סטטיות אינה נכונה. בנאים קשורים ליצירת מופע (אובייקט) ואינם static.

3. הטענה שבנאים כן עוברים בירושה פשוט אינה נכונה. מנגנון שיתוף הקוד ביניהם הוא באמצעות קריאות super() ולא באמצעות ירושה ישירה.

4. הכללים החלים על ירושת מתודות (לפי הרשאות גישה) אינם חלים על בנאים. בנאים, ללא תלות בהרשאת הגישה שלהם, לעולם אינם עוברים בירושה.