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

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

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

הודעהעל ידי 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.
sheknabs
 
הודעות: 31
הצטרף: 17:03 12/11/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;
בר כהן
 
הודעות: 146
הצטרף: 18:24 22/10/2009


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

מי מחובר

משתמשים הגולשים בפורום זה: אין משתמשים רשומים ו 2 אורחים