5 תשובות
מה השאלה?
אנונימית
שואל השאלה:
אני לא מצליח את סעיף א', יש שם משהו לא מובן לי.

בפעולה main, מה אומרת השורה השנייה?
אנונימי
אם הבנתי את הכוונה שלך אתה מדבר על השורה t a2 = new g("cat"). אתה יוצר מופע חדש של המחלקה g, אבל אתה מצהיר עליו כ-t. זה אפשרי כי g יורשת מ-t. הקומפיילר יכיר את a2 כאובייקט מטיפוס t אבל אם תפעיל מתודות שנדרסו ב-g יופעל המימוש הקיים ב-g
שואל השאלה:
תודה רבה, אז למשל מה יהיה הפלט, תוכל להגיד לי ולהסביר למה?
אנונימי
הדפסה ראשונה: t: dog כי a1 אובייקט מסוג t
הדפסה שנייה: g: cat. אמנם a2 הוא אובייקט מסוג t, אבל בתכלס הוא אובייקט מסוג g כי נקרא הבנאי של g, לכן תיקרא ההדפסה של g ולא של t(אני חושב שכדאי לבדוק את זה כי המתודה של ההדפסה אינה אבסטרקטית, מלא זמן לא יצא לי לעבוד עם java.
הדפסה שלישית: g: me כי מדובר באובייקט מסוג g
הדפסה רביעית: t: me כי בוצע קאסטינג מ-g ל-t
הדפסה חמישית: כמו הקודמת כי נקראה מתודת getfather שמחזירה אובייקט מסוג t ולכן גם ההדפסה היא של אובייקט מסוג t