עבור לתוכן

פולימורפיזם וירושה - משהו שאני לא מבין

Featured Replies

פורסם

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

פורסם

בשלושת המקרים הפעלת את הפונקציה של האובייקט dad שהוא מטיפוס Dad. בשום שלב לא הפעלת את הפונקציה של אובייקט מטיפוס Kid. הפולימורפיזם עובד אך ורק לפי האובייקט שלפני הנקודה.

מה המשמעות של הפרמטר שעובר למתודה? אתה לא עושה איתו כלום.

נערך על-ידי שניצל

פורסם
  • מחבר

אבל אני מעביר פרמטר מסוג Kid והמחלקה Dad מקבלת אובייקט מסוג Dad

פורסם

אתה לא עושה שום דבר עם הפרמטר שמועבר לפונקציה.. אין לו המטרה בקוד שלך.

עצם העובדה שהקומפיילר לא צעק לך כאשר העברת פרמטר מטיפוס Kid לפונקציה שבמחלקה Dad שמקבלת פרמטר מטיפוס Dad היא בגלל ש Kid יורש מ Dad ולכן זה תקין. חוץ מזה אין שום משמעות לפרמטר שאתה מעביר כאשר אתה קורא לפונקציה method בכל אחת מהמחלקות.

אתה קורא שלוש פעמים לפונקציה method של משתנה מטיפוס Dad ולכן זה יפעיל שלוש פעמים את אותה הפונקציה - שהיא זאת של המחלקה Dad.

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

פורסם
  • מחבר

תודה רבה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים