כמה שאלות בג'אווה

פיג03

New member
כמה שאלות בג'אווה

1.מה המשמעות של מחלקה שמוגדרת private? האם מחלקות אחרות באותו קובץ יכולות ליצור ממנה אוביקטים? אם מגדירים : class A class b exends A 1.פונקציה שמקבלת אוביקט מסוג A-יכולה לקבל גם אוביקט מסוג B.(פולימורפיזם) אם נשלח אוביקט B,האם בתוך הפונקציה מתיחסים לאוביקט אוטומטית כ-B או שצריך לעשות casting? 2.אם נגדיר : A a =new B() האם יקרא ה-constructor של A או של B? בתודה!
 

desertboy

New member
תשובות

1) כמובן שקיים פולימורפיזם בג'אווה אחרת היא לא היתה OO . 2) הבונה של B כמובן. 3) לגבי מחלקה שמוגדרת פרטית אין לה משמעות פרט לשמוש כ מחלקה מקוננת.
 

פיג03

New member
תודה, ועוד שאלה

רציתי לחדד את השאלה הקודמת: אם class B extends A ויש פונקציה שמקבלת אוביקט מסוג A. ברור שהיא יכולה לקבל גם אוביקט מסוג B. השאלה היא:האם כשנשלח לפונקציה הזו אוביקט B,נוכל להתיחס אליו בתוך הפונקציה אוטומטית כ-B,או שנצטרך לעשות לאוביקט שהתקבל המרה ל-B?
 

desertboy

New member
אין צורך

זהו בדיוק עקרון של הפולימורפיזם , אם אתה מעונין לדעת יותר תחפש חומר קריאה על פולימורפיזם ו vtable יש המון כאלו ברשת.
 
תשובה:../images/Emo26.gif

אם אתה רוצה לקרוא למתודה שמוגדרת ב-A ואז מוגדרת בשנית ב-B (ודורסת את זו שב-A: כלומר overriding), אז התשובה היא: לא. לא צריך לעשות casting, ותקרא המתודה המתאימה ב-B (וכמו שאמרו - זה בדיוק פולימורפיזם). אם אתה רוצה לקרוא למתודה שמוגדרת רק ב-B, אתה תהיה חייב לעשות casting ל-B (התוכנית לא תתקמפל אחרת). עם-זאת, חשוב לציין שבהרבה מקרים, אם הגעת למצב כזה - כנראה שה-design שלך לא היה משהו מלכתחילה...
 
למעלה