דף 1 מתוך 1

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

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

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

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.

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

נשלח: 17:12 23/01/2010
על ידי בר כהן
1) ניסית לשים אוביקט מסוג A בתוך B וזה לא אפשרי, אתה תמיד יכול לשים אוביקט של בן בתוך מצביע של אב, אבל לא ההפך (בלי קאסטינג מוצהר).

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

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

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

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