פולימורפיזם וירושה - משהו שאני לא מבין - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


falukky

Recommended Posts

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 ולכן זה תקין. חוץ מזה אין שום משמעות לפרמטר שאתה מעביר כאשר אתה קורא לפונקציה method בכל אחת מהמחלקות.

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...