הורשה בJAVA

saharme

New member
הורשה בJAVA

נניח שיש לי שלושה מחלקות A B C, A - מחלקת הבסיס(SUPERCLASS) B - יורשת מ A. C - יורשת מ-B. איך אני יכול לקרוא מתוך C לפונקציה שנמצאת ב-A ? תודה מראש....
 
אם הפונקציה לא מוגדרת

כ-private אתה פשוט קורא לה. אלא אם דרסת אותה במחלקה B.
 

saharme

New member
זאת לא הכוונה, התכוונתי

שנניח ש ב-A יש פונקציה שנקראת print(). B ו-C דרסו את הפונקציה הזאת. אבל בכל זאת אני רוצה ש-C תוכל להשתמש גם בפונקציה שהיא מימשה(דרסה) וגם בפונקציה שנמצאת ב-A. הרי אני לא יכול לכתוב super.super.print(). אז מה הפתרון לזה???
 

melatonin

New member
אי אפשר

אם B דרסה את זה, אתה לא יכול להשתמש בפונקציה של A
 
איני בטוח אבל נראה לי שאפשר...

ע"י קריאה ל_super
super.super.print();​
למרות שאני בספק רב אם זה אפשרי.
 

melatonin

New member
אי אפשר

public class Test { public static void main(String args[]) { super.super.toString(); } } > javac Test.java Test.java:5: <identifier> expected super.super.toString(); ^ Test.java:5: not a statement super.super.toString(); ^ 2 errors​
 

melatonin

New member
לא

public class Test extends java.io.BufferedReader { public static void main(String args[]) { super.super.toString(); } } > javac Test.java Test.java:5: <identifier> expected super.super.toString(); ^ Test.java:5: not a statement super.super.toString(); ^ 2 errors​
 

saharme

New member
כנראה שבאמת אי אפשר.

קודם כל תודה. תראו, אם יש לנו את המחלקות A B C, וכל אחת יורשת מהשניה ובנוסף כל מחלקה דרסה את הפונקציה ()print (לדוג') אז: אם אני ב C ורוצה להשתמש ב ()print שב B פשוט אני עושה ()super.print אבל אני לא יכול להגיע ל()print שב-A באופן הבא: ()super.super.print לכן שאלתי מה כן אני יכול לעשות. כנראה שפשוט אין פתרון לזה.... תודה בכל אופן...
 

melatonin

New member
ברור שיש לזה פתרון

B יכולה לדרוס את print אבל במקביל להגדיר פונקציה originalPrint כ protected שתקרא בעצמה ל super.print, כך ש C תוכל לקרוא ל super.originalPring ולהגיע ל print המקורי של A הבעיה היא שזה לא ממש יפה, ונוגד עקרונות של OOP
 
../images/Emo18.gif... ריח לא טוב...../images/Emo26.gif

כשאתה מגיע למצב בו אתה צריך "לדלג" מעל האבא ולהפעיל מתודה של הסבא (שהאבא דרס) ב-99% מהמקרים יש לזה הסבר טוב מאוד: יש לך באג ב-design!! זו גם אחת הסיבות שב-java זו משימה כל-כך מסובכת לביצוע ונראית כמשהו לא-טבעי - כי זה באמת משהו לא טבעי לעשות...
 
למעלה