מספר הרהורים לגבי פולימורפיזם!

מנהלים: TA_nimrod, TA_Igor, TA_Adi

שלח תגובה
sheknabs
הודעות: 31
הצטרף: 17:03 12/11/2009

מספר הרהורים לגבי פולימורפיזם!

שליחה על ידי sheknabs » 15:59 23/01/2010

קוד: בחירת הכל

public class A{
   public void print(){ S.O.P("A");}
}

public class B extends A{
   public void print(){ S.O.P("B");}
}

main:
(1) B ba = new A();
(2) B b = new B();
(3) (A)b.print();
(1) מדוע זה שגיאת קומפילציה? הריי בCAST לדוגמא הבדיקה נעשת בזמן ריצה. לא?
(3) האם זה נכון שכאשר יוצרים אובייקט ומצהירים עליו ומאתחלים אותו כאותו אחד אז הפולימורפיזם לא עובד אפילו אם עושים CAST? כלומר בשורה זו יודפס B למרות הCAST.

בר כהן
הודעות: 146
הצטרף: 18:24 22/10/2009

Re: מספר הרהורים לגבי פולימורפיזם!

שליחה על ידי בר כהן » 17:12 23/01/2010

1) ניסית לשים אוביקט מסוג A בתוך B וזה לא אפשרי, אתה תמיד יכול לשים אוביקט של בן בתוך מצביע של אב, אבל לא ההפך (בלי קאסטינג מוצהר).

3)כן, יודפס "B", הקאסטינג שעשית גרם לקומפיילר לבדוק האם השיטה print() קיימת במחלקה A, אבל בזמן הריצה הוא הפעיל את השיטה
המעודכנת ביותר(דהיינו פולימורפיזם).

זה לעומת זאת, כן יעבור קומפילציה, אבל יפול בזמן ריצה.

קוד: בחירת הכל

A a = new A();
B b = new B();
b=(B)a;

שלח תגובה

חזור אל “- מבוא למדעי המחשב 2010”