Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
ג'אווה - תכנות מונחה עצמים - מתודות - שליפה והכנסה, סטטיות, סופיות ומתודות שעבר זמנן
Next
Download to read offline and view in fullscreen.

2

Share

ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות

Download to read offline

חלק מסדרת הרצאות בנושא "תכנות מונחה עצמים בסביבת ג'אווה", והפעם: מתודות - חלק שני.

ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות

  1. 1. ‫מתודות‬ ‫דריסת‬–Method Overriding ‫כאשר‬ ‫מתודות‬ ‫דריסת‬ ‫של‬ ‫יישומים‬ ‫ראינו‬ .‫הזדמנויות‬ '‫במס‬ ‫מתודות‬ ‫דריסת‬ ‫נושא‬ ‫את‬ ‫אחרת‬ ‫או‬ ‫זו‬ ‫בצורה‬ ‫הזכרנו‬ ,‫כה‬ ‫עד‬ ‫המתודות‬ ‫את‬ ‫הזכרנו‬finalize()‫ו‬-equals()‫של‬ ‫ההגדרה‬ ‫בטווח‬ ‫כשדרסנו‬ ‫אנונימיות‬ ‫פנימיות‬ ‫מחלקות‬ ‫בנושא‬ ‫בפרק‬ ,‫כן‬ ‫וכמו‬ ‫בדוגמה‬ :‫(תזכורת‬ ‫ייחודי‬ ‫אובייקט‬ ‫קבלת‬ ‫לשם‬ ‫הרחבנו‬ ‫אותה‬ ‫המחלקה‬ ‫של‬ ‫המתודות‬ ‫אחת‬ ‫את‬ ‫האנונימית‬ ‫הפנימית‬ ‫המחלקה‬ ‫המתודה‬ ‫את‬ ‫דרסנו‬ ‫שראינו‬cout().) ‫במ‬ ‫חדשה‬ ‫מתודה‬ ‫להגדיר‬ ‫עלינו‬ ,‫קיימת‬ ‫מתודה‬ ‫לדרוס‬ ‫מנת‬ ‫על‬‫בעלת‬ ‫שתהה‬ ,‫ממשק‬ ‫מממשת‬ ‫או‬ ‫ממחלקה‬ ‫שיורשת‬ ‫חלקה‬ ‫אינה‬ ‫לדרוס‬ ‫מעוניינים‬ ‫אותה‬ ‫שהמתודה‬ ‫ובלבד‬ ‫הגדרתה‬ ‫את‬ ‫להחליף‬ ‫מעוניינים‬ ‫שאנו‬ ‫המתודה‬ ‫כמו‬ ‫בדיוק‬ ‫החתימה‬ ‫אותה‬ .)‫בהמשך‬ ‫(יוסבר‬ ‫סופית‬ ‫מתודה‬ :‫דוגמה‬ ‫נראה‬ public class BaseClass { protected int getID(int number) { return number*number+3; } } public class DerivedClass extends BaseClass { protected int getID(int number) { return number+3; } } ‫הוגדרה‬ ‫שבו‬ ‫באופן‬getID‫הלוגיקה‬ ‫ורק‬ )‫הכרחי‬ ‫תנאי‬ ,‫(כאמור‬ ‫לחלוטין‬ ‫זהה‬ ‫המתודה‬ ‫של‬ ‫והחתימה‬ ‫היות‬ ,‫היורשת‬ ‫במחלקה‬ ‫היא‬ ‫כאשר‬ ,‫שונה‬ ‫הפנימית‬‫מחדש‬ ‫שהוגדרה‬ ‫המתודה‬ ,‫היורשת‬ ‫מהמחלקה‬ ‫אובייקט‬ ‫על‬ ‫תופעל‬-‫ולא‬ ‫שתופעל‬ ‫זו‬ ‫היא‬ ‫נדרסה‬ ‫את‬ ‫מחדש‬ ‫מגדירים‬ ‫ולא‬ ,‫דריסה‬ ‫מבצעים‬ ‫היינו‬ ‫לא‬ ‫שאם‬ ‫כמובן‬ .‫המקורית‬ ‫המתודה‬getID,‫בה‬ ‫להשתמש‬ ‫יכולים‬ ‫היינו‬ ‫עדיין‬ .‫הבסיס‬ ‫ממחלקת‬ ‫שהגיעה‬ ‫זו‬ ‫הייתה‬ ‫שלה‬ ‫שההגדרה‬ ‫רק‬ super ‫השמורה‬ ‫המילה‬ ‫את‬ ‫להזכיר‬ ‫נכון‬ ,‫זו‬ ‫בנקודה‬super.‫מתודות‬ ‫דריסת‬ ‫של‬ ‫בהקשר‬ ‫בה‬ ‫השימוש‬ ‫לגבי‬ ‫ולהסביר‬ ‫השמורה‬ ‫המילה‬ ‫בפנינו‬ ‫נגישה‬ ‫הופכת‬ ,‫יורשת‬ ‫מחלקה‬ ‫של‬ ‫הגדרתה‬ ‫בתחום‬ ‫נמצאים‬ ‫אנו‬ ‫כאשר‬super‫בצירוף‬ ,‫בה‬ ‫שימוש‬ . .‫מרחיבה‬ ‫שלנו‬ ‫המחלקה‬ ‫אותה‬ ‫הבסיס‬ ‫מחלקת‬ ‫ומתודות‬ ‫משתני‬ ‫את‬ ‫בפנינו‬ ‫יחשוף‬ ‫אחריה‬ ‫מפרידה‬ ‫נקודה‬ ‫מגדירים‬ ‫שאנו‬ ‫המחלקה‬ ‫אם‬ ‫שהרי‬ ,‫מיותר‬ ‫הוא‬ ‫זו‬ ‫שמורה‬ ‫במילה‬ ‫ששימוש‬ ‫לחשוב‬ ‫כמובן‬ ‫נוכל‬ ,‫לעומק‬ ‫כך‬ ‫על‬ ‫נחשוב‬ ‫לא‬ ‫אם‬ ‫לג‬ ‫יכולים‬ ‫שאנו‬ ‫ידוע‬ ,‫הבסיס‬ ‫מחלקת‬ ‫את‬ ‫מרחיבה‬ ‫כרגע‬‫המילה‬ ‫בלי‬ ‫גם‬ ‫שלה‬ ‫ומתודות‬ ‫למשתנים‬ ‫שת‬super‫יהיה‬ ‫אכן‬ ‫והדבר‬ , .‫חדשה‬ ‫מתודה‬ ‫ע"י‬ ‫דרסנו‬ ‫הגדרתה‬ ‫שאת‬ ‫במתודה‬ ‫מדובר‬ ‫כאשר‬ :‫אחד‬ ‫במקרה‬ ‫מלבד‬ ‫המקרים‬ ‫בכל‬ ‫נכון‬ ,‫בירושה‬ ‫שהגיעה‬ ‫המתודה‬ ‫לחתימת‬ ‫לחלוטין‬ ‫זהה‬ ‫המתודה‬ ‫וחתימת‬ ‫היות‬ ,‫יורשת‬ ‫במחלקה‬ ‫מתודה‬ ‫דריסת‬ ‫שביצענו‬ ‫מרגע‬ ‫במח‬ ‫למתודה‬ ‫הגישה‬.‫הדורסת‬ ‫המתודה‬ ‫ע"י‬ ‫מוסתרת‬ ‫להיות‬ ‫הופכת‬ ‫הבסיס‬ ‫לקת‬
  2. 2. ‫השמורה‬ ‫המילה‬ ‫את‬ ‫לשלוף‬ ‫אז‬ ‫נוכל‬ ,‫המקורית‬ ‫במתודה‬ ‫שימוש‬ ‫לעשות‬ ‫נרצה‬ ‫זאת‬ ‫ובכל‬ ‫במידה‬super:‫כך‬ ‫בה‬ ‫ולהשתמש‬ public class Human { public void cout() { System.out.println("I'm a Human!"); } } public class Person extends Human { public void cout() { super.cout(); System.out.println("But not just a Human, I'm a person too"); } } ‫המתודה‬ ‫את‬ ‫נפעיל‬ ‫כאשר‬ ,‫זה‬ ‫באופן‬cout()‫של‬ ‫אובייקט‬ ‫על‬Human:‫הפלט‬ ‫שורת‬ ‫את‬ ‫נקבל‬ , I'm a Human! ‫המתודה‬ ‫את‬ ‫נפעיל‬ ‫וכאשר‬cout()‫של‬ ‫אובייקט‬ ‫על‬Person:‫הפלט‬ ‫שורות‬ ‫את‬ ‫נקבל‬ , I'm a Human! But not just a Human, I'm a person too ‫ה‬ ‫מבין‬ ‫הראשונה‬ ‫הפלט‬ ‫שורת‬-2‫הפעלת‬ ‫מעצם‬ ‫נובעת‬ ‫האחרונות‬cout()‫של‬Human: super.cout(); ‫של‬ ‫הגדרתה‬ ‫משאר‬ ‫ישירות‬ ‫נובעות‬ ‫השנייה‬ ‫הפלט‬ ‫ושורת‬cout()‫ב‬-Person: System.out.println("But not just a Human, I'm a person too"); ‫השמורה‬ ‫למילה‬ ‫שימושים‬ ‫עוד‬ ‫ישנם‬super.‫בהמשך‬ ‫אותם‬ ‫נזכיר‬ , ‫שנקראת‬ ‫טכניקה‬ ‫על‬ ‫לדבר‬ ‫ניתן‬ ,‫המתחילים‬ ‫מהמתכנתים‬ ‫רבים‬ ‫בקרב‬ ‫לבלבול‬ ‫גורם‬ ,‫מה‬ ‫משום‬ ‫אך‬ ,‫לגמרי‬ ‫שונה‬ ‫באופן‬ ‫העמסת‬:‫מתודות‬
  3. 3. ‫העמסת‬-‫מתודות‬ ‫חפיפת‬–Method Overloading ‫שמקנה‬ ‫התנאי‬ .‫אופנים‬ '‫במס‬ ‫זהה‬ ‫שם‬ ‫בעלות‬ ‫למתודות‬ ‫קריאה‬ ‫ולאפשר‬ ‫המתודה‬ ‫אותה‬ ‫של‬ ‫גרסאות‬ '‫מס‬ ‫לייצר‬ ‫באפשרותנו‬ .‫החופפות‬ ‫המתודות‬ ‫בחתימות‬ ‫שוני‬ ‫על‬ ‫שמירה‬ ‫הוא‬ ‫הזו‬ ‫היכולת‬ ‫את‬ ‫לנו‬ ‫שהיא‬ ‫הפרמטרים‬ '‫מס‬ ,‫המתודה‬ ‫משם‬ ‫מורכבת‬ ‫המתודה‬ ‫חתימת‬.‫המתודה‬ ‫של‬ ‫החזרה‬ ‫וערך‬ ‫סוגם‬ ,‫מקבלת‬ ‫שמות‬ ‫את‬ ‫לשנות‬ ‫מספיק‬ ‫לא‬ ,‫כן‬ ‫וכמו‬ ‫בלבד‬ ‫שלהם‬ ‫החזרה‬ ‫בערך‬ ‫מזו‬ ‫זו‬ ‫שונות‬ ‫יהיו‬ ‫חופפות‬ ‫שמתודות‬ ‫מספיק‬ ‫לא‬ :‫לב‬ ‫נשים‬ !‫המתודה‬ ‫שמקבלת‬ ‫הפרמטרים‬ ‫הפרמטרים‬ '‫מס‬ :‫הבאים‬ ‫מהשניים‬ ‫באחד‬ ‫לשוני‬ ‫נדאג‬ ‫אם‬ ,‫השם‬ ‫אותו‬ ‫בעלות‬ ‫חופפות‬ ‫מתודות‬ ‫לייצר‬ ‫יכולים‬ ‫אנו‬,‫מקבלות‬ ‫שהן‬ ‫שהמתודה‬ ‫הפרמטרים‬ ‫טיפוסי‬ ‫של‬ ‫ההופעה‬ ‫בסדר‬ ‫לשוני‬ ‫נדאג‬ ‫אם‬ ‫היא‬ ‫נוספת‬ ‫אופציה‬ .‫מקבלות‬ ‫שהן‬ ‫הפרמטרים‬ ‫טיפוסי‬ ‫או‬ .‫מומלצת‬ ‫לא‬ ‫זו‬ ‫אופציה‬ ‫אך‬ ,‫מקבלת‬ :‫שהוזכרו‬ ‫לאפשרויות‬ ‫בהתאם‬ ,‫מתודות‬ ‫העמסת‬ ‫של‬ ‫למקרים‬ ‫דוגמאות‬ ‫נראה‬ public class ClassName { public int getID(int number, char number2) { return number*number+3; } public void getID(char number) { //Change in the number of the parameters } public int getID(int number) { //Change in the type of the parameter return number*number+3; } public void getID(int number) { //Not enough changing only the return type } public int getID(char number2, int number) { //Not Recommended changing only d order return number*number+3; } } :‫הטכניקות‬ ‫שתי‬ ,‫לראות‬ ‫שניתן‬ ‫כפי‬‫דריסת‬‫ו‬ ‫מתודות‬‫העמסת‬‫כדי‬ ‫עד‬ ‫אפילו‬ ‫אולי‬ ,‫מהשנייה‬ ‫האחת‬ ‫בתכליתן‬ ‫שונות‬ ‫מתודות‬ :‫מהשנייה‬ ‫האחת‬ ‫לחלוטין‬ ‫הפוכות‬ ‫לחלוטין‬ ‫לה‬ ‫זהה‬ ‫תהה‬ ‫הדורסת‬ ‫המתודה‬ ‫שחתימת‬ ‫כך‬ ,‫המקורית‬ ‫המתודה‬ ‫חתימת‬ ‫על‬ ‫לשמור‬ ‫עלינו‬ ,‫מתודה‬ ‫לדרוס‬ ‫מנת‬ ‫על‬ .‫ירושה‬ ‫רמת‬ ‫בכל‬ ‫בלבד‬ ‫אחת‬ ‫פעם‬ ‫מתודה‬ ‫לדרוס‬ ‫ניתן‬ ,‫מכך‬ ‫יוצא‬ ‫וכפועל‬ ‫להעמ‬ ‫מנת‬ ‫על‬‫מתודה‬ ‫כל‬ ‫של‬ )‫המתודה‬ ‫שמקבלת‬ ‫הפרמטרים‬ ‫סוג‬ ‫או‬ '‫(מס‬ ‫החתימות‬ ‫בין‬ ‫מהותי‬ ‫לשוני‬ ‫לדאוג‬ ‫עלינו‬ ,‫מתודה‬ ‫יס‬ ‫חתימות‬ ‫לבין‬ ‫שלה‬ ‫החתימה‬ ‫בין‬ ‫מהותי‬ ‫שוני‬ ‫יש‬ ‫עוד‬ ‫כל‬ ,‫פעמים‬ '‫מס‬ ‫מתודה‬ ‫כל‬ ‫להעמיס‬ ‫ניתן‬ ,‫כלומר‬ ,‫שלידה‬ ‫מזו‬ ‫מועמסת‬ .‫שהועמסו‬ ‫האחרות‬ ‫המתודות‬
  4. 4. ‫בונות‬ ‫מתודות‬-Constructors ‫מת‬‫בונות‬ ‫ודות‬–‫בראש‬ ,‫אובייקט‬ ‫יצירת‬ ‫בעת‬ .‫יצרנו‬ ‫עתה‬ ‫שזה‬ ‫אובייקט‬ ‫לאתחל‬ ‫ע"מ‬ ‫נועדו‬ ‫אשר‬ ‫מתודות‬ ‫הן‬ ,‫קונסטרקטורים‬ ‫לרשימת‬ ‫בהתאם‬ ,‫בונה‬ ‫מתודה‬ ‫תופעל‬ ,‫מכן‬ ‫לאחר‬ ‫מיד‬ ,‫שלהם‬ ‫המחדל‬ ‫ברירת‬ ‫בערכי‬ ‫המופע‬ ‫משתני‬ ‫יאותחלו‬ ‫ובראשונה‬ ‫תופ‬ ,‫ערכים‬ ‫רשימת‬ ‫נשלחה‬ ‫לא‬ ‫אם‬ .‫היצירה‬ ‫בעת‬ ‫שנשלחה‬ ‫הערכים‬‫דפולטיבית‬ ‫בונה‬ ‫מתודה‬ ‫על‬–.‫פרמטרים‬ ‫ללא‬ ‫אף‬ ‫ידינו‬ ‫על‬ ‫הוגדרה‬ ‫שלא‬ ‫בתנאי‬ ‫וזאת‬ ‫אוטומטי‬ ‫באופן‬ ‫תוגדר‬ ,‫ידינו‬ ‫על‬ ‫תוגדר‬ ‫לא‬ ‫אם‬ ‫גם‬ ,‫דפולטיבית‬ ‫בונה‬ ‫מתודה‬ ‫אותה‬ .‫פרמטרים‬ ‫מקבלת‬ ‫שכן‬ ‫כזו‬ ,‫אחרת‬ ‫בונה‬ ‫מתודה‬ ‫בונה‬ ‫מתודה‬ ‫לאפשר‬ ‫וברצוננו‬ ‫פרמטרים‬ ‫שמקבלת‬ ‫בונה‬ ‫מתודה‬ ‫ידינו‬ ‫על‬ ‫הוגדרה‬ ‫אם‬‫עלינו‬ ‫יהיה‬ ,‫פרמטרים‬ ‫מקבלת‬ ‫שלא‬ .‫אוטומטי‬ ‫באופן‬ ‫תיווצר‬ ‫לא‬ ‫כבר‬ ‫היא‬ ,‫וכאמור‬ ‫היות‬ ‫ידני‬ ‫באופן‬ ‫אותה‬ ‫להגדיר‬ !‫שהוא‬ ‫סוג‬ ‫משום‬ ‫חזרה‬ ‫ערך‬ ‫וללא‬ ‫גישה‬ ‫במציין‬ ‫מקודמת‬ ,‫מוגדרת‬ ‫היא‬ ‫בה‬ ‫המחלקה‬ ‫כשם‬ ‫תמיד‬ ‫יהיה‬ ‫בונה‬ ‫מתודה‬ ‫של‬ ‫שמה‬ ‫המחלקה‬ ‫עבור‬ ,‫לדוגמה‬ClassName‫ה‬ ‫ללא‬ ‫הבונה‬ ‫המתודה‬ ‫תוגדר‬:‫פרמטרים‬ public ClassName() { } ‫הקונסטרקטורים‬ ‫בין‬ ‫שונות‬ ‫חתימות‬ ‫עפ"י‬ ,‫רגילות‬ ‫מתודות‬ ‫לחפיפה‬ ‫ניתנות‬ ‫בו‬ ‫האופן‬ ‫באותו‬ ‫לחפיפה‬ ‫ניתנות‬ ‫בונות‬ ‫מתודות‬ ‫פרמטרים‬ ‫ללא‬ ‫בונה‬ ‫מתודה‬ ‫עוד‬ ‫תיווצר‬ ‫לא‬ ,‫יותר‬ ‫או‬ ‫אחד‬ ‫פרמטר‬ ‫עם‬ ‫בונה‬ ‫מתודה‬ ‫של‬ ‫הגדרה‬ ‫בעת‬ ,‫כאמור‬ .‫השונים‬ ‫ועל‬ ,‫דפולטיבית‬.‫מפורש‬ ‫באופן‬ ‫להגדירה‬ ‫עלינו‬ ‫יש‬ ,‫כזו‬ ‫אחת‬ ‫של‬ ‫שירות‬ ‫לספק‬ ‫ברצוננו‬ ‫יש‬ ‫אם‬ ,‫כן‬ ,‫לדוגמה‬ ,‫מהפרמטרים‬ ‫אלו‬ ‫אי‬ ‫לספק‬ ‫האובייקט‬ ‫ליוצר‬ ‫ולאפשר‬ ‫פרמטרים‬ ‫רשימת‬ ‫סמך‬ ‫על‬ ‫אובייקט‬ ‫לבנות‬ ‫נרצה‬ ,‫לעתים‬ ‫בין‬ ‫פרמטרים‬ ‫של‬ '‫מס‬ ‫כל‬ ‫לנו‬ ‫לשלוח‬ ‫למשתמש‬ ‫לאפשר‬ ‫מעוניינים‬ ‫ואנו‬ ,‫משתנים‬ ‫ארבעה‬ ‫שלנו‬ ‫במחלקה‬0‫ל‬-4‫ובהתאם‬ , .‫הפרמטרים‬ ‫שאר‬ ‫של‬ ‫ידנית‬ ‫השלמה‬ ‫תוך‬ ‫האובייקט‬ ‫את‬ ‫נבנה‬ ,‫שנשלחו‬ ‫לפרמטרים‬ ‫מתוך‬ ‫קריאה‬ ‫ולבצע‬ ‫הבונות‬ ‫המתודות‬ ‫של‬ ‫חפיפה‬ ‫לבצע‬ ‫צריכים‬ ‫אנו‬ ,‫יישלחו‬ ‫פרמטרים‬ ‫כמה‬ ‫מראש‬ ‫יודעים‬ ‫לא‬ ‫ואנו‬ ‫היות‬ ‫ל‬ ‫בהתאם‬ ,‫התמונה‬ ‫את‬ ‫ונשלים‬ ‫נעטר‬ ‫אנו‬ ‫כשבדרך‬ ,‫אחרת‬ ‫בונה‬ ‫למתודה‬ ‫הבונה‬ ‫המתודה‬‫להציב‬ ‫מעוניינים‬ ‫שאנו‬ ‫ערכים‬ .‫מחדל‬ ‫כברירת‬ ‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫באמצעות‬ ‫נעשית‬ ‫אחרת‬ ‫בונה‬ ‫מתודה‬ ‫מתוך‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬this‫הפרמטרים‬ ‫ורשימת‬ .‫אחרת‬ ‫למתודה‬ ‫קוראים‬ ‫שהיינו‬ ‫כשם‬ ‫בדיוק‬ ,‫בסוגריים‬ ‫מחדל‬ ‫ברירת‬ ‫בערכי‬ ‫ומאתחלת‬ ‫ארבעה‬ ‫מתוך‬ ‫פרמטרים‬ ‫שני‬ ‫שמקבלת‬ ‫בונה‬ ‫מתודה‬ ‫למשל‬ ‫נגדיר‬:‫הנותרים‬ ‫השניים‬ ‫את‬ this(int a, int b, 1, 1); ‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫הראשונה‬ ‫בשורה‬ ‫להיעשות‬ ‫חייבת‬ ‫שכזו‬ ‫קריאה‬. ‫שאר‬ ,‫כלומר‬ ,‫הקריאה‬ ‫התבצעה‬ ‫בה‬ ‫השורה‬ ‫לאחר‬ ‫מיד‬ ‫תמשיך‬ ‫התוכנית‬ ,‫שנקראה‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫פעולתה‬ ‫סיום‬ ‫לאחר‬ .‫הקריאה‬ ‫התבצעה‬ ‫בו‬ ‫בבנאי‬ ‫הקוד‬ ‫קטע‬ ‫האוב‬ ‫בהם‬ ‫במקרים‬‫של‬ ‫בניה‬ ‫מתבצעת‬ ,‫ראשית‬ .‫מעט‬ ‫משתנה‬ ‫הפעולות‬ ‫סדר‬ ,‫אחרת‬ ‫ממחלקה‬ ‫שיורשת‬ ‫ממחלקה‬ ‫נוצר‬ ‫ייקט‬ ‫של‬ ‫הבנאי‬ ‫הפעלת‬ ,‫ובסיומה‬ ‫הבסיס‬ ‫מחלקת‬ ‫של‬ ‫הבנאי‬ ‫של‬ ‫ברקע‬ ‫אוטומטית‬ ‫הפעלה‬ ‫כלומר‬ ,‫הבסיס‬ ‫ממחלקת‬ ‫אובייקט‬ .‫היורשת‬ ‫המחלקה‬ ‫של‬ ‫לבנאי‬ ‫נגיע‬ ‫לבסוף‬ ,‫מורישות‬ ‫מחלקות‬ ‫לעוד‬ ‫בהיררכיה‬ ‫נעלה‬ ‫אם‬ ‫גם‬ ‫כך‬‫המחלקה‬Object,‫ואחריו‬ ,‫ראשון‬ ‫יופעל‬ ‫הוא‬ , .‫אחרון‬ ‫שיופעל‬ ‫לבנות‬ ‫מנסים‬ ‫שאנו‬ ‫האובייקט‬ ‫של‬ ‫לבנאי‬ ‫עד‬ ‫הבנאים‬ ‫שאר‬ ‫יופעלו‬ ,‫ההיררכיה‬ ‫במורד‬
  5. 5. ‫שגיאת‬ ‫תתרחש‬ ,‫כזה‬ ‫אחד‬ ‫קיים‬ ‫לא‬ ‫אם‬ .‫פרמטרים‬ ‫מקבל‬ ‫שלא‬ ‫המחדל‬ ‫ברירת‬ ‫בנאי‬ ‫הוא‬ ‫אוטומטית‬ ‫שמופעל‬ ‫הבנאי‬ ‫זו‬ ‫שגיאה‬ ‫לפתור‬ ‫מנת‬ ‫על‬ .‫קומפילציה‬:‫דרכים‬ ‫משתי‬ ‫באחת‬ ‫לפעול‬ ‫ניתן‬ :‫פרמטרים‬ ‫ללא‬ ‫בנאי‬ ‫הבסיס‬ ‫מחלקת‬ ‫להגדרת‬ ‫להוסיף‬ ,‫הראשונה‬ BaseClass() { } :‫המחדל‬ ‫ברירת‬ ‫מבנאי‬ ‫ששונה‬ ,‫הבסיס‬ ‫במחלקת‬ ‫המוגדר‬ ‫לבנאי‬ ‫קריאה‬ ‫לבצע‬ ,‫השנייה‬ super ‫השמורה‬ ‫המילה‬ ‫את‬ ‫שוב‬ ‫להזכיר‬ ‫נכון‬ ,‫זו‬ ‫בנקודה‬super.‫בונות‬ ‫מתודות‬ ‫של‬ ‫בהקשר‬ ‫בה‬ ‫השימוש‬ ‫לגבי‬ ‫ולהסביר‬ ‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫ע"י‬ ‫תתבצע‬ ‫הבסיס‬ ‫מחלקת‬ ‫של‬ ‫לבנאי‬ ‫קריאה‬super. :‫לדוגמה‬ ‫הבא‬ ‫באופן‬ ‫תתבצע‬ ,‫הבסיס‬ ‫במחלקת‬ ‫המחדל‬ ‫ברירת‬ ‫מבנאי‬ ‫שונה‬ ‫לבנאי‬ ‫קריאה‬ super(3,"to",6); :‫לבנאי‬ ‫קריאה‬ ‫תתבצע‬ ‫זו‬ ‫בדרך‬ BaseClass(int a, String b, int c) { } .‫תתאפשר‬ ‫זו‬ ‫שקריאה‬ ‫כדי‬ ,‫בה‬ ‫מוגדר‬ ‫להיות‬ ‫צריך‬ ‫שהוא‬ ‫וכמובן‬ :‫הבא‬ ‫באופן‬ ‫הבהירות‬ ‫לשם‬ ‫ורק‬ ‫אך‬ ‫תיעשה‬ ‫וזו‬ ‫פרמטרים‬ ‫ללא‬ ‫לבנאי‬ ‫קריאה‬ ‫לבצע‬ ‫גם‬ ‫ניתן‬ super(); .‫מפורשות‬ ‫אותה‬ ‫נציין‬ ‫לא‬ ‫אם‬ ‫גם‬ ‫אוטומטית‬ ‫בצורה‬ ,‫כאמור‬ ,‫שמתבצעת‬ ‫קריאה‬ ‫זוהי‬ ‫בשורה‬ ‫להיעשות‬ ‫חייבת‬ ‫שכזו‬ ‫קריאה‬‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫הראשונה‬. ‫שימוש‬ ‫תוך‬ ‫במחלקה‬ ‫אחרת‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬ ‫שגם‬ ‫הגדרנו‬ ‫שהרי‬ ,‫קונפליקט‬ ‫קיים‬ ‫שבתיאוריה‬ ‫מבינים‬ ‫אנו‬ ,‫זו‬ ‫בנקודה‬ ‫השמורה‬ ‫במילה‬this‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫תוך‬ ‫הבסיס‬ ‫ממחלקת‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬ ‫וגם‬super‫שתיהן‬ ‫חייבות‬ , ‫להיעשות‬‫הראשונה‬ ‫בשורה‬‫של‬‫נשאלת‬ ,‫כן‬ ‫אם‬ ...‫אחת‬ ‫רק‬ ‫יש‬ ‫ראשונה‬ ‫ששורה‬ ‫לכולנו‬ ‫וברור‬ ,‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ?‫השפה‬ ‫בדרישות‬ ‫סתירה‬ ‫כאן‬ ‫אין‬ ‫האם‬ ,‫השאלה‬ ‫לא‬ ‫שזה‬ ‫כמובן‬ ‫אך‬ ,‫כאחד‬ ‫וותיקים‬ ‫מתחילים‬ ‫תכניתנים‬ ‫נופלים‬ ‫אליה‬ ‫מלכודת‬ ‫במעין‬ ‫מדובר‬ .‫שאין‬ ‫היא‬ ‫הברורה‬ ‫התשובה‬ ,‫ובכן‬ ‫כד‬ ‫לפעול‬ ‫עלינו‬ ‫כיצד‬ ‫שנבין‬ ‫ע"מ‬ ‫מספיק‬‫הנכון‬ ‫השימוש‬ ‫אופן‬ ‫את‬ ‫ראשית‬ ‫להבין‬ ‫עלינו‬ ‫יהיה‬ ,‫כך‬ ‫לשם‬ .‫זו‬ ‫במלכודת‬ ‫ליפול‬ ‫לא‬ ‫י‬ ‫ע"י‬ ‫המחלקה‬ ‫אותה‬ ‫מתוך‬ ‫לבנאים‬ ‫בקריאה‬this‫מאליו‬ ‫ברור‬ ‫יהיה‬ ,‫יעיל‬ ‫באופן‬ ‫זו‬ ‫בטכניקה‬ ‫להשתמש‬ ‫כיצד‬ ‫שנבין‬ ‫לאחר‬ . .‫לעיל‬ ‫שתואר‬ ‫המלכודת‬ ‫למצב‬ ‫הפתרון‬ ‫משתמש‬ ‫אנו‬ ‫בגינה‬ ‫הסיבה‬ ‫מהי‬ ,‫עצמנו‬ ‫את‬ ‫נשאל‬ ‫ראשית‬‫ב‬ ‫ים‬-this‫אם‬ ?‫בנאי‬ ‫של‬ ‫הגדרתו‬ ‫מתוך‬ ‫אחר‬ ‫לבנאי‬ ‫קריאה‬ ‫לשם‬ .‫קוד‬ ‫בשורות‬ ‫חיסכון‬ ‫לשם‬ ‫נעשה‬ ‫שהדבר‬ ‫להסכים‬ ‫נוכל‬ ,‫זו‬ ‫בטכניקה‬ ‫לשימוש‬ ‫האמתית‬ ‫הסיבה‬ ‫על‬ ‫לעומק‬ ‫נחשוב‬ ‫תוך‬ ‫דפולטיביים‬ ‫ערכים‬ ‫אליו‬ ‫ישלחו‬ ‫הקונסטרקטורים‬ ‫ששאר‬ ‫זה‬ ‫יהיה‬ ‫פרמטרים‬ ‫הרבה‬ ‫הכי‬ ‫שמקבל‬ ‫שהבנאי‬ ‫הוא‬ ‫הרעיון‬ ‫לו‬ ‫קריאה‬‫באמצעות‬this‫לבנאי‬ ‫ממנו‬ ‫לקרוא‬ ‫צורך‬ ‫כבר‬ ‫אין‬ ,‫הפרמטרים‬ ‫כל‬ ‫את‬ ‫שמקבל‬ ‫זה‬ ‫והוא‬ ‫היות‬ ,‫הגדרתו‬ ‫שבתחום‬ ‫כך‬ , ‫ב‬ ‫בשימוש‬ ‫צורך‬ ‫באמת‬ ‫אין‬ ,‫כן‬ ‫ועל‬ ,‫פחות‬ ‫משוכלל‬-this‫ל‬ ‫שיקרא‬ ‫זה‬ ‫יהיה‬ ‫הוא‬ ‫ולכן‬ ‫בהגדרתו‬-super‫את‬ ‫פתרנו‬ ‫ובכך‬ .‫הבעיה‬
  6. 6. :‫הנ"ל‬ ‫להסבר‬ ‫מימוש‬ ‫נראה‬ public class BaseClass { BaseClass() { } } public class DerivedClass extends BaseClass { DerivedClass() { this(0,0,0); } DerivedClass(int i) { this(i,0,0); } DerivedClass(int i, int j) { this(i,j,0); } DerivedClass(int i, int j, int k) { super(); } }
  • YounisAboglion

    Dec. 23, 2015
  • aboglion

    Dec. 23, 2015

חלק מסדרת הרצאות בנושא "תכנות מונחה עצמים בסביבת ג'אווה", והפעם: מתודות - חלק שני.

Views

Total views

3,605

On Slideshare

0

From embeds

0

Number of embeds

410

Actions

Downloads

31

Shares

0

Comments

0

Likes

2

×