פורסם 2013 בנובמבר 2912 שנים public class Dad{ public void method(Dad d) { System.out.println("Dad's method"); }}public class Kid extends Dad{ public void method(Kid k) { System.out.println("in kids method overloading dad's method"); } public void method(Dad d) { System.out.println("in kids method overriding dad's method"); } public static void main(String[] args) { Dad dad = new Dad(); Dad reallyKid = new Dad(); Kid kid = new Kid(); dad.method(dad); dad.method(reallyKid); dad.method(kid); }}הפלט של התוכנית הוא 3 פעמים אותו הדבר - Dad's methodהשאלה שלי היא לגבי הפעם השלישית והאחרונה - למה זה לא מדפיס in kids method overriding dad's method כי הרי יש שיטה שדורסת והפרמטר שהועבר לפונקציה הוא מסוג Kid
פורסם 2013 בנובמבר 2912 שנים בשלושת המקרים הפעלת את הפונקציה של האובייקט dad שהוא מטיפוס Dad. בשום שלב לא הפעלת את הפונקציה של אובייקט מטיפוס Kid. הפולימורפיזם עובד אך ורק לפי האובייקט שלפני הנקודה.מה המשמעות של הפרמטר שעובר למתודה? אתה לא עושה איתו כלום. נערך 2013 בנובמבר 2912 שנים על-ידי שניצל
פורסם 2013 בנובמבר 2912 שנים אתה לא עושה שום דבר עם הפרמטר שמועבר לפונקציה.. אין לו המטרה בקוד שלך.עצם העובדה שהקומפיילר לא צעק לך כאשר העברת פרמטר מטיפוס Kid לפונקציה שבמחלקה Dad שמקבלת פרמטר מטיפוס Dad היא בגלל ש Kid יורש מ Dad ולכן זה תקין. חוץ מזה אין שום משמעות לפרמטר שאתה מעביר כאשר אתה קורא לפונקציה method בכל אחת מהמחלקות.אתה קורא שלוש פעמים לפונקציה method של משתנה מטיפוס Dad ולכן זה יפעיל שלוש פעמים את אותה הפונקציה - שהיא זאת של המחלקה Dad.בכל מקרה הפונקציה שבמחלקה היורשת לא נקראת אם זה מה שהתכוונת לעשות בקוד שלך כי בזמן ריצה אתה קורא לפונקציה של טיפוס מסוג הבסיס.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.