SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות
‫מתודות‬ ‫דריסת‬–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‫יהיה‬ ‫אכן‬ ‫והדבר‬ ,
.‫חדשה‬ ‫מתודה‬ ‫ע"י‬ ‫דרסנו‬ ‫הגדרתה‬ ‫שאת‬ ‫במתודה‬ ‫מדובר‬ ‫כאשר‬ :‫אחד‬ ‫במקרה‬ ‫מלבד‬ ‫המקרים‬ ‫בכל‬ ‫נכון‬
,‫בירושה‬ ‫שהגיעה‬ ‫המתודה‬ ‫לחתימת‬ ‫לחלוטין‬ ‫זהה‬ ‫המתודה‬ ‫וחתימת‬ ‫היות‬ ,‫יורשת‬ ‫במחלקה‬ ‫מתודה‬ ‫דריסת‬ ‫שביצענו‬ ‫מרגע‬
‫במח‬ ‫למתודה‬ ‫הגישה‬.‫הדורסת‬ ‫המתודה‬ ‫ע"י‬ ‫מוסתרת‬ ‫להיות‬ ‫הופכת‬ ‫הבסיס‬ ‫לקת‬
‫השמורה‬ ‫המילה‬ ‫את‬ ‫לשלוף‬ ‫אז‬ ‫נוכל‬ ,‫המקורית‬ ‫במתודה‬ ‫שימוש‬ ‫לעשות‬ ‫נרצה‬ ‫זאת‬ ‫ובכל‬ ‫במידה‬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.‫בהמשך‬ ‫אותם‬ ‫נזכיר‬ ,
‫שנקראת‬ ‫טכניקה‬ ‫על‬ ‫לדבר‬ ‫ניתן‬ ,‫המתחילים‬ ‫מהמתכנתים‬ ‫רבים‬ ‫בקרב‬ ‫לבלבול‬ ‫גורם‬ ,‫מה‬ ‫משום‬ ‫אך‬ ,‫לגמרי‬ ‫שונה‬ ‫באופן‬
‫העמסת‬:‫מתודות‬
‫העמסת‬-‫מתודות‬ ‫חפיפת‬–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;
}
}
:‫הטכניקות‬ ‫שתי‬ ,‫לראות‬ ‫שניתן‬ ‫כפי‬‫דריסת‬‫ו‬ ‫מתודות‬‫העמסת‬‫כדי‬ ‫עד‬ ‫אפילו‬ ‫אולי‬ ,‫מהשנייה‬ ‫האחת‬ ‫בתכליתן‬ ‫שונות‬ ‫מתודות‬
:‫מהשנייה‬ ‫האחת‬ ‫לחלוטין‬ ‫הפוכות‬
‫לחלוטין‬ ‫לה‬ ‫זהה‬ ‫תהה‬ ‫הדורסת‬ ‫המתודה‬ ‫שחתימת‬ ‫כך‬ ,‫המקורית‬ ‫המתודה‬ ‫חתימת‬ ‫על‬ ‫לשמור‬ ‫עלינו‬ ,‫מתודה‬ ‫לדרוס‬ ‫מנת‬ ‫על‬
.‫ירושה‬ ‫רמת‬ ‫בכל‬ ‫בלבד‬ ‫אחת‬ ‫פעם‬ ‫מתודה‬ ‫לדרוס‬ ‫ניתן‬ ,‫מכך‬ ‫יוצא‬ ‫וכפועל‬
‫להעמ‬ ‫מנת‬ ‫על‬‫מתודה‬ ‫כל‬ ‫של‬ )‫המתודה‬ ‫שמקבלת‬ ‫הפרמטרים‬ ‫סוג‬ ‫או‬ '‫(מס‬ ‫החתימות‬ ‫בין‬ ‫מהותי‬ ‫לשוני‬ ‫לדאוג‬ ‫עלינו‬ ,‫מתודה‬ ‫יס‬
‫חתימות‬ ‫לבין‬ ‫שלה‬ ‫החתימה‬ ‫בין‬ ‫מהותי‬ ‫שוני‬ ‫יש‬ ‫עוד‬ ‫כל‬ ,‫פעמים‬ '‫מס‬ ‫מתודה‬ ‫כל‬ ‫להעמיס‬ ‫ניתן‬ ,‫כלומר‬ ,‫שלידה‬ ‫מזו‬ ‫מועמסת‬
.‫שהועמסו‬ ‫האחרות‬ ‫המתודות‬
‫בונות‬ ‫מתודות‬-Constructors
‫מת‬‫בונות‬ ‫ודות‬–‫בראש‬ ,‫אובייקט‬ ‫יצירת‬ ‫בעת‬ .‫יצרנו‬ ‫עתה‬ ‫שזה‬ ‫אובייקט‬ ‫לאתחל‬ ‫ע"מ‬ ‫נועדו‬ ‫אשר‬ ‫מתודות‬ ‫הן‬ ,‫קונסטרקטורים‬
‫לרשימת‬ ‫בהתאם‬ ,‫בונה‬ ‫מתודה‬ ‫תופעל‬ ,‫מכן‬ ‫לאחר‬ ‫מיד‬ ,‫שלהם‬ ‫המחדל‬ ‫ברירת‬ ‫בערכי‬ ‫המופע‬ ‫משתני‬ ‫יאותחלו‬ ‫ובראשונה‬
‫תופ‬ ,‫ערכים‬ ‫רשימת‬ ‫נשלחה‬ ‫לא‬ ‫אם‬ .‫היצירה‬ ‫בעת‬ ‫שנשלחה‬ ‫הערכים‬‫דפולטיבית‬ ‫בונה‬ ‫מתודה‬ ‫על‬–.‫פרמטרים‬ ‫ללא‬
‫אף‬ ‫ידינו‬ ‫על‬ ‫הוגדרה‬ ‫שלא‬ ‫בתנאי‬ ‫וזאת‬ ‫אוטומטי‬ ‫באופן‬ ‫תוגדר‬ ,‫ידינו‬ ‫על‬ ‫תוגדר‬ ‫לא‬ ‫אם‬ ‫גם‬ ,‫דפולטיבית‬ ‫בונה‬ ‫מתודה‬ ‫אותה‬
.‫פרמטרים‬ ‫מקבלת‬ ‫שכן‬ ‫כזו‬ ,‫אחרת‬ ‫בונה‬ ‫מתודה‬
‫בונה‬ ‫מתודה‬ ‫לאפשר‬ ‫וברצוננו‬ ‫פרמטרים‬ ‫שמקבלת‬ ‫בונה‬ ‫מתודה‬ ‫ידינו‬ ‫על‬ ‫הוגדרה‬ ‫אם‬‫עלינו‬ ‫יהיה‬ ,‫פרמטרים‬ ‫מקבלת‬ ‫שלא‬
.‫אוטומטי‬ ‫באופן‬ ‫תיווצר‬ ‫לא‬ ‫כבר‬ ‫היא‬ ,‫וכאמור‬ ‫היות‬ ‫ידני‬ ‫באופן‬ ‫אותה‬ ‫להגדיר‬
!‫שהוא‬ ‫סוג‬ ‫משום‬ ‫חזרה‬ ‫ערך‬ ‫וללא‬ ‫גישה‬ ‫במציין‬ ‫מקודמת‬ ,‫מוגדרת‬ ‫היא‬ ‫בה‬ ‫המחלקה‬ ‫כשם‬ ‫תמיד‬ ‫יהיה‬ ‫בונה‬ ‫מתודה‬ ‫של‬ ‫שמה‬
‫המחלקה‬ ‫עבור‬ ,‫לדוגמה‬ClassName‫ה‬ ‫ללא‬ ‫הבונה‬ ‫המתודה‬ ‫תוגדר‬:‫פרמטרים‬
public ClassName() {
}
‫הקונסטרקטורים‬ ‫בין‬ ‫שונות‬ ‫חתימות‬ ‫עפ"י‬ ,‫רגילות‬ ‫מתודות‬ ‫לחפיפה‬ ‫ניתנות‬ ‫בו‬ ‫האופן‬ ‫באותו‬ ‫לחפיפה‬ ‫ניתנות‬ ‫בונות‬ ‫מתודות‬
‫פרמטרים‬ ‫ללא‬ ‫בונה‬ ‫מתודה‬ ‫עוד‬ ‫תיווצר‬ ‫לא‬ ,‫יותר‬ ‫או‬ ‫אחד‬ ‫פרמטר‬ ‫עם‬ ‫בונה‬ ‫מתודה‬ ‫של‬ ‫הגדרה‬ ‫בעת‬ ,‫כאמור‬ .‫השונים‬
‫ועל‬ ,‫דפולטיבית‬.‫מפורש‬ ‫באופן‬ ‫להגדירה‬ ‫עלינו‬ ‫יש‬ ,‫כזו‬ ‫אחת‬ ‫של‬ ‫שירות‬ ‫לספק‬ ‫ברצוננו‬ ‫יש‬ ‫אם‬ ,‫כן‬
,‫לדוגמה‬ ,‫מהפרמטרים‬ ‫אלו‬ ‫אי‬ ‫לספק‬ ‫האובייקט‬ ‫ליוצר‬ ‫ולאפשר‬ ‫פרמטרים‬ ‫רשימת‬ ‫סמך‬ ‫על‬ ‫אובייקט‬ ‫לבנות‬ ‫נרצה‬ ,‫לעתים‬
‫בין‬ ‫פרמטרים‬ ‫של‬ '‫מס‬ ‫כל‬ ‫לנו‬ ‫לשלוח‬ ‫למשתמש‬ ‫לאפשר‬ ‫מעוניינים‬ ‫ואנו‬ ,‫משתנים‬ ‫ארבעה‬ ‫שלנו‬ ‫במחלקה‬0‫ל‬-4‫ובהתאם‬ ,
.‫הפרמטרים‬ ‫שאר‬ ‫של‬ ‫ידנית‬ ‫השלמה‬ ‫תוך‬ ‫האובייקט‬ ‫את‬ ‫נבנה‬ ,‫שנשלחו‬ ‫לפרמטרים‬
‫מתוך‬ ‫קריאה‬ ‫ולבצע‬ ‫הבונות‬ ‫המתודות‬ ‫של‬ ‫חפיפה‬ ‫לבצע‬ ‫צריכים‬ ‫אנו‬ ,‫יישלחו‬ ‫פרמטרים‬ ‫כמה‬ ‫מראש‬ ‫יודעים‬ ‫לא‬ ‫ואנו‬ ‫היות‬
‫ל‬ ‫בהתאם‬ ,‫התמונה‬ ‫את‬ ‫ונשלים‬ ‫נעטר‬ ‫אנו‬ ‫כשבדרך‬ ,‫אחרת‬ ‫בונה‬ ‫למתודה‬ ‫הבונה‬ ‫המתודה‬‫להציב‬ ‫מעוניינים‬ ‫שאנו‬ ‫ערכים‬
.‫מחדל‬ ‫כברירת‬
‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫באמצעות‬ ‫נעשית‬ ‫אחרת‬ ‫בונה‬ ‫מתודה‬ ‫מתוך‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬this‫הפרמטרים‬ ‫ורשימת‬
.‫אחרת‬ ‫למתודה‬ ‫קוראים‬ ‫שהיינו‬ ‫כשם‬ ‫בדיוק‬ ,‫בסוגריים‬
‫מחדל‬ ‫ברירת‬ ‫בערכי‬ ‫ומאתחלת‬ ‫ארבעה‬ ‫מתוך‬ ‫פרמטרים‬ ‫שני‬ ‫שמקבלת‬ ‫בונה‬ ‫מתודה‬ ‫למשל‬ ‫נגדיר‬:‫הנותרים‬ ‫השניים‬ ‫את‬
this(int a, int b, 1, 1);
‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫הראשונה‬ ‫בשורה‬ ‫להיעשות‬ ‫חייבת‬ ‫שכזו‬ ‫קריאה‬.
‫שאר‬ ,‫כלומר‬ ,‫הקריאה‬ ‫התבצעה‬ ‫בה‬ ‫השורה‬ ‫לאחר‬ ‫מיד‬ ‫תמשיך‬ ‫התוכנית‬ ,‫שנקראה‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫פעולתה‬ ‫סיום‬ ‫לאחר‬
.‫הקריאה‬ ‫התבצעה‬ ‫בו‬ ‫בבנאי‬ ‫הקוד‬ ‫קטע‬
‫האוב‬ ‫בהם‬ ‫במקרים‬‫של‬ ‫בניה‬ ‫מתבצעת‬ ,‫ראשית‬ .‫מעט‬ ‫משתנה‬ ‫הפעולות‬ ‫סדר‬ ,‫אחרת‬ ‫ממחלקה‬ ‫שיורשת‬ ‫ממחלקה‬ ‫נוצר‬ ‫ייקט‬
‫של‬ ‫הבנאי‬ ‫הפעלת‬ ,‫ובסיומה‬ ‫הבסיס‬ ‫מחלקת‬ ‫של‬ ‫הבנאי‬ ‫של‬ ‫ברקע‬ ‫אוטומטית‬ ‫הפעלה‬ ‫כלומר‬ ,‫הבסיס‬ ‫ממחלקת‬ ‫אובייקט‬
.‫היורשת‬ ‫המחלקה‬
‫של‬ ‫לבנאי‬ ‫נגיע‬ ‫לבסוף‬ ,‫מורישות‬ ‫מחלקות‬ ‫לעוד‬ ‫בהיררכיה‬ ‫נעלה‬ ‫אם‬ ‫גם‬ ‫כך‬‫המחלקה‬Object,‫ואחריו‬ ,‫ראשון‬ ‫יופעל‬ ‫הוא‬ ,
.‫אחרון‬ ‫שיופעל‬ ‫לבנות‬ ‫מנסים‬ ‫שאנו‬ ‫האובייקט‬ ‫של‬ ‫לבנאי‬ ‫עד‬ ‫הבנאים‬ ‫שאר‬ ‫יופעלו‬ ,‫ההיררכיה‬ ‫במורד‬
‫שגיאת‬ ‫תתרחש‬ ,‫כזה‬ ‫אחד‬ ‫קיים‬ ‫לא‬ ‫אם‬ .‫פרמטרים‬ ‫מקבל‬ ‫שלא‬ ‫המחדל‬ ‫ברירת‬ ‫בנאי‬ ‫הוא‬ ‫אוטומטית‬ ‫שמופעל‬ ‫הבנאי‬
‫זו‬ ‫שגיאה‬ ‫לפתור‬ ‫מנת‬ ‫על‬ .‫קומפילציה‬:‫דרכים‬ ‫משתי‬ ‫באחת‬ ‫לפעול‬ ‫ניתן‬
:‫פרמטרים‬ ‫ללא‬ ‫בנאי‬ ‫הבסיס‬ ‫מחלקת‬ ‫להגדרת‬ ‫להוסיף‬ ,‫הראשונה‬
BaseClass() {
}
:‫המחדל‬ ‫ברירת‬ ‫מבנאי‬ ‫ששונה‬ ,‫הבסיס‬ ‫במחלקת‬ ‫המוגדר‬ ‫לבנאי‬ ‫קריאה‬ ‫לבצע‬ ,‫השנייה‬
super
‫השמורה‬ ‫המילה‬ ‫את‬ ‫שוב‬ ‫להזכיר‬ ‫נכון‬ ,‫זו‬ ‫בנקודה‬super.‫בונות‬ ‫מתודות‬ ‫של‬ ‫בהקשר‬ ‫בה‬ ‫השימוש‬ ‫לגבי‬ ‫ולהסביר‬
‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫ע"י‬ ‫תתבצע‬ ‫הבסיס‬ ‫מחלקת‬ ‫של‬ ‫לבנאי‬ ‫קריאה‬super.
:‫לדוגמה‬ ‫הבא‬ ‫באופן‬ ‫תתבצע‬ ,‫הבסיס‬ ‫במחלקת‬ ‫המחדל‬ ‫ברירת‬ ‫מבנאי‬ ‫שונה‬ ‫לבנאי‬ ‫קריאה‬
super(3,"to",6);
:‫לבנאי‬ ‫קריאה‬ ‫תתבצע‬ ‫זו‬ ‫בדרך‬
BaseClass(int a, String b, int c) {
}
.‫תתאפשר‬ ‫זו‬ ‫שקריאה‬ ‫כדי‬ ,‫בה‬ ‫מוגדר‬ ‫להיות‬ ‫צריך‬ ‫שהוא‬ ‫וכמובן‬
:‫הבא‬ ‫באופן‬ ‫הבהירות‬ ‫לשם‬ ‫ורק‬ ‫אך‬ ‫תיעשה‬ ‫וזו‬ ‫פרמטרים‬ ‫ללא‬ ‫לבנאי‬ ‫קריאה‬ ‫לבצע‬ ‫גם‬ ‫ניתן‬
super();
.‫מפורשות‬ ‫אותה‬ ‫נציין‬ ‫לא‬ ‫אם‬ ‫גם‬ ‫אוטומטית‬ ‫בצורה‬ ,‫כאמור‬ ,‫שמתבצעת‬ ‫קריאה‬ ‫זוהי‬
‫בשורה‬ ‫להיעשות‬ ‫חייבת‬ ‫שכזו‬ ‫קריאה‬‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫הראשונה‬.
‫שימוש‬ ‫תוך‬ ‫במחלקה‬ ‫אחרת‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬ ‫שגם‬ ‫הגדרנו‬ ‫שהרי‬ ,‫קונפליקט‬ ‫קיים‬ ‫שבתיאוריה‬ ‫מבינים‬ ‫אנו‬ ,‫זו‬ ‫בנקודה‬
‫השמורה‬ ‫במילה‬this‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫תוך‬ ‫הבסיס‬ ‫ממחלקת‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬ ‫וגם‬super‫שתיהן‬ ‫חייבות‬ ,
‫להיעשות‬‫הראשונה‬ ‫בשורה‬‫של‬‫נשאלת‬ ,‫כן‬ ‫אם‬ ...‫אחת‬ ‫רק‬ ‫יש‬ ‫ראשונה‬ ‫ששורה‬ ‫לכולנו‬ ‫וברור‬ ,‫הקוראת‬ ‫הבונה‬ ‫המתודה‬
?‫השפה‬ ‫בדרישות‬ ‫סתירה‬ ‫כאן‬ ‫אין‬ ‫האם‬ ,‫השאלה‬
‫לא‬ ‫שזה‬ ‫כמובן‬ ‫אך‬ ,‫כאחד‬ ‫וותיקים‬ ‫מתחילים‬ ‫תכניתנים‬ ‫נופלים‬ ‫אליה‬ ‫מלכודת‬ ‫במעין‬ ‫מדובר‬ .‫שאין‬ ‫היא‬ ‫הברורה‬ ‫התשובה‬ ,‫ובכן‬
‫כד‬ ‫לפעול‬ ‫עלינו‬ ‫כיצד‬ ‫שנבין‬ ‫ע"מ‬ ‫מספיק‬‫הנכון‬ ‫השימוש‬ ‫אופן‬ ‫את‬ ‫ראשית‬ ‫להבין‬ ‫עלינו‬ ‫יהיה‬ ,‫כך‬ ‫לשם‬ .‫זו‬ ‫במלכודת‬ ‫ליפול‬ ‫לא‬ ‫י‬
‫ע"י‬ ‫המחלקה‬ ‫אותה‬ ‫מתוך‬ ‫לבנאים‬ ‫בקריאה‬this‫מאליו‬ ‫ברור‬ ‫יהיה‬ ,‫יעיל‬ ‫באופן‬ ‫זו‬ ‫בטכניקה‬ ‫להשתמש‬ ‫כיצד‬ ‫שנבין‬ ‫לאחר‬ .
.‫לעיל‬ ‫שתואר‬ ‫המלכודת‬ ‫למצב‬ ‫הפתרון‬
‫משתמש‬ ‫אנו‬ ‫בגינה‬ ‫הסיבה‬ ‫מהי‬ ,‫עצמנו‬ ‫את‬ ‫נשאל‬ ‫ראשית‬‫ב‬ ‫ים‬-this‫אם‬ ?‫בנאי‬ ‫של‬ ‫הגדרתו‬ ‫מתוך‬ ‫אחר‬ ‫לבנאי‬ ‫קריאה‬ ‫לשם‬
.‫קוד‬ ‫בשורות‬ ‫חיסכון‬ ‫לשם‬ ‫נעשה‬ ‫שהדבר‬ ‫להסכים‬ ‫נוכל‬ ,‫זו‬ ‫בטכניקה‬ ‫לשימוש‬ ‫האמתית‬ ‫הסיבה‬ ‫על‬ ‫לעומק‬ ‫נחשוב‬
‫תוך‬ ‫דפולטיביים‬ ‫ערכים‬ ‫אליו‬ ‫ישלחו‬ ‫הקונסטרקטורים‬ ‫ששאר‬ ‫זה‬ ‫יהיה‬ ‫פרמטרים‬ ‫הרבה‬ ‫הכי‬ ‫שמקבל‬ ‫שהבנאי‬ ‫הוא‬ ‫הרעיון‬
‫לו‬ ‫קריאה‬‫באמצעות‬this‫לבנאי‬ ‫ממנו‬ ‫לקרוא‬ ‫צורך‬ ‫כבר‬ ‫אין‬ ,‫הפרמטרים‬ ‫כל‬ ‫את‬ ‫שמקבל‬ ‫זה‬ ‫והוא‬ ‫היות‬ ,‫הגדרתו‬ ‫שבתחום‬ ‫כך‬ ,
‫ב‬ ‫בשימוש‬ ‫צורך‬ ‫באמת‬ ‫אין‬ ,‫כן‬ ‫ועל‬ ,‫פחות‬ ‫משוכלל‬-this‫ל‬ ‫שיקרא‬ ‫זה‬ ‫יהיה‬ ‫הוא‬ ‫ולכן‬ ‫בהגדרתו‬-super‫את‬ ‫פתרנו‬ ‫ובכך‬
.‫הבעיה‬
:‫הנ"ל‬ ‫להסבר‬ ‫מימוש‬ ‫נראה‬
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();
}
}

Contenu connexe

Tendances (20)

Super keyword.23
Super keyword.23Super keyword.23
Super keyword.23
 
Java: Inheritance
Java: InheritanceJava: Inheritance
Java: Inheritance
 
7.data types in c#
7.data types in c#7.data types in c#
7.data types in c#
 
Java Basics
Java BasicsJava Basics
Java Basics
 
Control Structures in Python
Control Structures in PythonControl Structures in Python
Control Structures in Python
 
Virtual function and abstract class
Virtual function and abstract classVirtual function and abstract class
Virtual function and abstract class
 
Inheritance
InheritanceInheritance
Inheritance
 
Java conditional statements
Java conditional statementsJava conditional statements
Java conditional statements
 
Ppt on this and super keyword
Ppt on this and super keywordPpt on this and super keyword
Ppt on this and super keyword
 
Function overloading
Function overloadingFunction overloading
Function overloading
 
inheritance in C++
inheritance in C++inheritance in C++
inheritance in C++
 
SQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתוניםSQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתונים
 
Inheritance in JAVA PPT
Inheritance  in JAVA PPTInheritance  in JAVA PPT
Inheritance in JAVA PPT
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
 
Java inheritance
Java inheritanceJava inheritance
Java inheritance
 
Classes abstratas
Classes abstratasClasses abstratas
Classes abstratas
 
Virtual function in C++ Pure Virtual Function
Virtual function in C++ Pure Virtual Function Virtual function in C++ Pure Virtual Function
Virtual function in C++ Pure Virtual Function
 
JAVA OOP
JAVA OOPJAVA OOP
JAVA OOP
 
Inheritance in c++ part1
Inheritance in c++ part1Inheritance in c++ part1
Inheritance in c++ part1
 
Inheritance in java
Inheritance in javaInheritance in java
Inheritance in java
 

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

תכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותתכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותמורן אלקובי
 
בדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtualבדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtualמורן אלקובי
 
C# .net lecture 2 Objects 2
C# .net lecture 2 Objects 2C# .net lecture 2 Objects 2
C# .net lecture 2 Objects 2Doron Raifman
 
הורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקותהורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקותמורן אלקובי
 
תכנות מדעי: פייתון: הרצאה 10: : תחום הכרעה
תכנות מדעי: פייתון: הרצאה 10: : תחום הכרעהתכנות מדעי: פייתון: הרצאה 10: : תחום הכרעה
תכנות מדעי: פייתון: הרצאה 10: : תחום הכרעהIgor Kleiner
 

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

תכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותתכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקות
 
בדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtualבדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtual
 
javascript
javascriptjavascript
javascript
 
Selenium WebDriver
Selenium WebDriverSelenium WebDriver
Selenium WebDriver
 
C# .net lecture 2 Objects 2
C# .net lecture 2 Objects 2C# .net lecture 2 Objects 2
C# .net lecture 2 Objects 2
 
הורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקותהורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקות
 
תכנות מדעי: פייתון: הרצאה 10: : תחום הכרעה
תכנות מדעי: פייתון: הרצאה 10: : תחום הכרעהתכנות מדעי: פייתון: הרצאה 10: : תחום הכרעה
תכנות מדעי: פייתון: הרצאה 10: : תחום הכרעה
 

Plus de מורן אלקובי

ג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותמורן אלקובי
 
ג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהמורן אלקובי
 
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהמורן אלקובי
 
SQL - מודל ישויות קשרים
SQL - מודל ישויות קשריםSQL - מודל ישויות קשרים
SQL - מודל ישויות קשריםמורן אלקובי
 
כלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטיםכלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטיםמורן אלקובי
 
עבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סיעבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סימורן אלקובי
 
מצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשבמצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשבמורן אלקובי
 
מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מורן אלקובי
 
מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מורן אלקובי
 
מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3מורן אלקובי
 
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולותמתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולותמורן אלקובי
 
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרותמתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרותמורן אלקובי
 
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמורן אלקובי
 

Plus de מורן אלקובי (19)

ג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיות
 
ג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשה
 
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
 
MySQL - מילון השאילתא
MySQL - מילון השאילתאMySQL - מילון השאילתא
MySQL - מילון השאילתא
 
SQL - מודל הנתונים
SQL - מודל הנתוניםSQL - מודל הנתונים
SQL - מודל הנתונים
 
SQL - אלגברה של יחסים
SQL - אלגברה של יחסיםSQL - אלגברה של יחסים
SQL - אלגברה של יחסים
 
SQL - מודל ישויות קשרים
SQL - מודל ישויות קשריםSQL - מודל ישויות קשרים
SQL - מודל ישויות קשרים
 
MySQL - מרכיבי השאילתא
MySQL - מרכיבי השאילתאMySQL - מרכיבי השאילתא
MySQL - מרכיבי השאילתא
 
טורי חזקה
טורי חזקהטורי חזקה
טורי חזקה
 
כלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטיםכלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטים
 
DLL מדריך לעבודה עם
DLL מדריך לעבודה עםDLL מדריך לעבודה עם
DLL מדריך לעבודה עם
 
עבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סיעבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סי
 
מצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשבמצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשב
 
מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3
 
מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3
 
מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3
 
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולותמתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
 
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרותמתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
 
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
 

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

  • 2. ‫מתודות‬ ‫דריסת‬–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‫יהיה‬ ‫אכן‬ ‫והדבר‬ , .‫חדשה‬ ‫מתודה‬ ‫ע"י‬ ‫דרסנו‬ ‫הגדרתה‬ ‫שאת‬ ‫במתודה‬ ‫מדובר‬ ‫כאשר‬ :‫אחד‬ ‫במקרה‬ ‫מלבד‬ ‫המקרים‬ ‫בכל‬ ‫נכון‬ ,‫בירושה‬ ‫שהגיעה‬ ‫המתודה‬ ‫לחתימת‬ ‫לחלוטין‬ ‫זהה‬ ‫המתודה‬ ‫וחתימת‬ ‫היות‬ ,‫יורשת‬ ‫במחלקה‬ ‫מתודה‬ ‫דריסת‬ ‫שביצענו‬ ‫מרגע‬ ‫במח‬ ‫למתודה‬ ‫הגישה‬.‫הדורסת‬ ‫המתודה‬ ‫ע"י‬ ‫מוסתרת‬ ‫להיות‬ ‫הופכת‬ ‫הבסיס‬ ‫לקת‬
  • 3. ‫השמורה‬ ‫המילה‬ ‫את‬ ‫לשלוף‬ ‫אז‬ ‫נוכל‬ ,‫המקורית‬ ‫במתודה‬ ‫שימוש‬ ‫לעשות‬ ‫נרצה‬ ‫זאת‬ ‫ובכל‬ ‫במידה‬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.‫בהמשך‬ ‫אותם‬ ‫נזכיר‬ , ‫שנקראת‬ ‫טכניקה‬ ‫על‬ ‫לדבר‬ ‫ניתן‬ ,‫המתחילים‬ ‫מהמתכנתים‬ ‫רבים‬ ‫בקרב‬ ‫לבלבול‬ ‫גורם‬ ,‫מה‬ ‫משום‬ ‫אך‬ ,‫לגמרי‬ ‫שונה‬ ‫באופן‬ ‫העמסת‬:‫מתודות‬
  • 4. ‫העמסת‬-‫מתודות‬ ‫חפיפת‬–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; } } :‫הטכניקות‬ ‫שתי‬ ,‫לראות‬ ‫שניתן‬ ‫כפי‬‫דריסת‬‫ו‬ ‫מתודות‬‫העמסת‬‫כדי‬ ‫עד‬ ‫אפילו‬ ‫אולי‬ ,‫מהשנייה‬ ‫האחת‬ ‫בתכליתן‬ ‫שונות‬ ‫מתודות‬ :‫מהשנייה‬ ‫האחת‬ ‫לחלוטין‬ ‫הפוכות‬ ‫לחלוטין‬ ‫לה‬ ‫זהה‬ ‫תהה‬ ‫הדורסת‬ ‫המתודה‬ ‫שחתימת‬ ‫כך‬ ,‫המקורית‬ ‫המתודה‬ ‫חתימת‬ ‫על‬ ‫לשמור‬ ‫עלינו‬ ,‫מתודה‬ ‫לדרוס‬ ‫מנת‬ ‫על‬ .‫ירושה‬ ‫רמת‬ ‫בכל‬ ‫בלבד‬ ‫אחת‬ ‫פעם‬ ‫מתודה‬ ‫לדרוס‬ ‫ניתן‬ ,‫מכך‬ ‫יוצא‬ ‫וכפועל‬ ‫להעמ‬ ‫מנת‬ ‫על‬‫מתודה‬ ‫כל‬ ‫של‬ )‫המתודה‬ ‫שמקבלת‬ ‫הפרמטרים‬ ‫סוג‬ ‫או‬ '‫(מס‬ ‫החתימות‬ ‫בין‬ ‫מהותי‬ ‫לשוני‬ ‫לדאוג‬ ‫עלינו‬ ,‫מתודה‬ ‫יס‬ ‫חתימות‬ ‫לבין‬ ‫שלה‬ ‫החתימה‬ ‫בין‬ ‫מהותי‬ ‫שוני‬ ‫יש‬ ‫עוד‬ ‫כל‬ ,‫פעמים‬ '‫מס‬ ‫מתודה‬ ‫כל‬ ‫להעמיס‬ ‫ניתן‬ ,‫כלומר‬ ,‫שלידה‬ ‫מזו‬ ‫מועמסת‬ .‫שהועמסו‬ ‫האחרות‬ ‫המתודות‬
  • 5. ‫בונות‬ ‫מתודות‬-Constructors ‫מת‬‫בונות‬ ‫ודות‬–‫בראש‬ ,‫אובייקט‬ ‫יצירת‬ ‫בעת‬ .‫יצרנו‬ ‫עתה‬ ‫שזה‬ ‫אובייקט‬ ‫לאתחל‬ ‫ע"מ‬ ‫נועדו‬ ‫אשר‬ ‫מתודות‬ ‫הן‬ ,‫קונסטרקטורים‬ ‫לרשימת‬ ‫בהתאם‬ ,‫בונה‬ ‫מתודה‬ ‫תופעל‬ ,‫מכן‬ ‫לאחר‬ ‫מיד‬ ,‫שלהם‬ ‫המחדל‬ ‫ברירת‬ ‫בערכי‬ ‫המופע‬ ‫משתני‬ ‫יאותחלו‬ ‫ובראשונה‬ ‫תופ‬ ,‫ערכים‬ ‫רשימת‬ ‫נשלחה‬ ‫לא‬ ‫אם‬ .‫היצירה‬ ‫בעת‬ ‫שנשלחה‬ ‫הערכים‬‫דפולטיבית‬ ‫בונה‬ ‫מתודה‬ ‫על‬–.‫פרמטרים‬ ‫ללא‬ ‫אף‬ ‫ידינו‬ ‫על‬ ‫הוגדרה‬ ‫שלא‬ ‫בתנאי‬ ‫וזאת‬ ‫אוטומטי‬ ‫באופן‬ ‫תוגדר‬ ,‫ידינו‬ ‫על‬ ‫תוגדר‬ ‫לא‬ ‫אם‬ ‫גם‬ ,‫דפולטיבית‬ ‫בונה‬ ‫מתודה‬ ‫אותה‬ .‫פרמטרים‬ ‫מקבלת‬ ‫שכן‬ ‫כזו‬ ,‫אחרת‬ ‫בונה‬ ‫מתודה‬ ‫בונה‬ ‫מתודה‬ ‫לאפשר‬ ‫וברצוננו‬ ‫פרמטרים‬ ‫שמקבלת‬ ‫בונה‬ ‫מתודה‬ ‫ידינו‬ ‫על‬ ‫הוגדרה‬ ‫אם‬‫עלינו‬ ‫יהיה‬ ,‫פרמטרים‬ ‫מקבלת‬ ‫שלא‬ .‫אוטומטי‬ ‫באופן‬ ‫תיווצר‬ ‫לא‬ ‫כבר‬ ‫היא‬ ,‫וכאמור‬ ‫היות‬ ‫ידני‬ ‫באופן‬ ‫אותה‬ ‫להגדיר‬ !‫שהוא‬ ‫סוג‬ ‫משום‬ ‫חזרה‬ ‫ערך‬ ‫וללא‬ ‫גישה‬ ‫במציין‬ ‫מקודמת‬ ,‫מוגדרת‬ ‫היא‬ ‫בה‬ ‫המחלקה‬ ‫כשם‬ ‫תמיד‬ ‫יהיה‬ ‫בונה‬ ‫מתודה‬ ‫של‬ ‫שמה‬ ‫המחלקה‬ ‫עבור‬ ,‫לדוגמה‬ClassName‫ה‬ ‫ללא‬ ‫הבונה‬ ‫המתודה‬ ‫תוגדר‬:‫פרמטרים‬ public ClassName() { } ‫הקונסטרקטורים‬ ‫בין‬ ‫שונות‬ ‫חתימות‬ ‫עפ"י‬ ,‫רגילות‬ ‫מתודות‬ ‫לחפיפה‬ ‫ניתנות‬ ‫בו‬ ‫האופן‬ ‫באותו‬ ‫לחפיפה‬ ‫ניתנות‬ ‫בונות‬ ‫מתודות‬ ‫פרמטרים‬ ‫ללא‬ ‫בונה‬ ‫מתודה‬ ‫עוד‬ ‫תיווצר‬ ‫לא‬ ,‫יותר‬ ‫או‬ ‫אחד‬ ‫פרמטר‬ ‫עם‬ ‫בונה‬ ‫מתודה‬ ‫של‬ ‫הגדרה‬ ‫בעת‬ ,‫כאמור‬ .‫השונים‬ ‫ועל‬ ,‫דפולטיבית‬.‫מפורש‬ ‫באופן‬ ‫להגדירה‬ ‫עלינו‬ ‫יש‬ ,‫כזו‬ ‫אחת‬ ‫של‬ ‫שירות‬ ‫לספק‬ ‫ברצוננו‬ ‫יש‬ ‫אם‬ ,‫כן‬ ,‫לדוגמה‬ ,‫מהפרמטרים‬ ‫אלו‬ ‫אי‬ ‫לספק‬ ‫האובייקט‬ ‫ליוצר‬ ‫ולאפשר‬ ‫פרמטרים‬ ‫רשימת‬ ‫סמך‬ ‫על‬ ‫אובייקט‬ ‫לבנות‬ ‫נרצה‬ ,‫לעתים‬ ‫בין‬ ‫פרמטרים‬ ‫של‬ '‫מס‬ ‫כל‬ ‫לנו‬ ‫לשלוח‬ ‫למשתמש‬ ‫לאפשר‬ ‫מעוניינים‬ ‫ואנו‬ ,‫משתנים‬ ‫ארבעה‬ ‫שלנו‬ ‫במחלקה‬0‫ל‬-4‫ובהתאם‬ , .‫הפרמטרים‬ ‫שאר‬ ‫של‬ ‫ידנית‬ ‫השלמה‬ ‫תוך‬ ‫האובייקט‬ ‫את‬ ‫נבנה‬ ,‫שנשלחו‬ ‫לפרמטרים‬ ‫מתוך‬ ‫קריאה‬ ‫ולבצע‬ ‫הבונות‬ ‫המתודות‬ ‫של‬ ‫חפיפה‬ ‫לבצע‬ ‫צריכים‬ ‫אנו‬ ,‫יישלחו‬ ‫פרמטרים‬ ‫כמה‬ ‫מראש‬ ‫יודעים‬ ‫לא‬ ‫ואנו‬ ‫היות‬ ‫ל‬ ‫בהתאם‬ ,‫התמונה‬ ‫את‬ ‫ונשלים‬ ‫נעטר‬ ‫אנו‬ ‫כשבדרך‬ ,‫אחרת‬ ‫בונה‬ ‫למתודה‬ ‫הבונה‬ ‫המתודה‬‫להציב‬ ‫מעוניינים‬ ‫שאנו‬ ‫ערכים‬ .‫מחדל‬ ‫כברירת‬ ‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫באמצעות‬ ‫נעשית‬ ‫אחרת‬ ‫בונה‬ ‫מתודה‬ ‫מתוך‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬this‫הפרמטרים‬ ‫ורשימת‬ .‫אחרת‬ ‫למתודה‬ ‫קוראים‬ ‫שהיינו‬ ‫כשם‬ ‫בדיוק‬ ,‫בסוגריים‬ ‫מחדל‬ ‫ברירת‬ ‫בערכי‬ ‫ומאתחלת‬ ‫ארבעה‬ ‫מתוך‬ ‫פרמטרים‬ ‫שני‬ ‫שמקבלת‬ ‫בונה‬ ‫מתודה‬ ‫למשל‬ ‫נגדיר‬:‫הנותרים‬ ‫השניים‬ ‫את‬ this(int a, int b, 1, 1); ‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫הראשונה‬ ‫בשורה‬ ‫להיעשות‬ ‫חייבת‬ ‫שכזו‬ ‫קריאה‬. ‫שאר‬ ,‫כלומר‬ ,‫הקריאה‬ ‫התבצעה‬ ‫בה‬ ‫השורה‬ ‫לאחר‬ ‫מיד‬ ‫תמשיך‬ ‫התוכנית‬ ,‫שנקראה‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫פעולתה‬ ‫סיום‬ ‫לאחר‬ .‫הקריאה‬ ‫התבצעה‬ ‫בו‬ ‫בבנאי‬ ‫הקוד‬ ‫קטע‬ ‫האוב‬ ‫בהם‬ ‫במקרים‬‫של‬ ‫בניה‬ ‫מתבצעת‬ ,‫ראשית‬ .‫מעט‬ ‫משתנה‬ ‫הפעולות‬ ‫סדר‬ ,‫אחרת‬ ‫ממחלקה‬ ‫שיורשת‬ ‫ממחלקה‬ ‫נוצר‬ ‫ייקט‬ ‫של‬ ‫הבנאי‬ ‫הפעלת‬ ,‫ובסיומה‬ ‫הבסיס‬ ‫מחלקת‬ ‫של‬ ‫הבנאי‬ ‫של‬ ‫ברקע‬ ‫אוטומטית‬ ‫הפעלה‬ ‫כלומר‬ ,‫הבסיס‬ ‫ממחלקת‬ ‫אובייקט‬ .‫היורשת‬ ‫המחלקה‬ ‫של‬ ‫לבנאי‬ ‫נגיע‬ ‫לבסוף‬ ,‫מורישות‬ ‫מחלקות‬ ‫לעוד‬ ‫בהיררכיה‬ ‫נעלה‬ ‫אם‬ ‫גם‬ ‫כך‬‫המחלקה‬Object,‫ואחריו‬ ,‫ראשון‬ ‫יופעל‬ ‫הוא‬ , .‫אחרון‬ ‫שיופעל‬ ‫לבנות‬ ‫מנסים‬ ‫שאנו‬ ‫האובייקט‬ ‫של‬ ‫לבנאי‬ ‫עד‬ ‫הבנאים‬ ‫שאר‬ ‫יופעלו‬ ,‫ההיררכיה‬ ‫במורד‬
  • 6. ‫שגיאת‬ ‫תתרחש‬ ,‫כזה‬ ‫אחד‬ ‫קיים‬ ‫לא‬ ‫אם‬ .‫פרמטרים‬ ‫מקבל‬ ‫שלא‬ ‫המחדל‬ ‫ברירת‬ ‫בנאי‬ ‫הוא‬ ‫אוטומטית‬ ‫שמופעל‬ ‫הבנאי‬ ‫זו‬ ‫שגיאה‬ ‫לפתור‬ ‫מנת‬ ‫על‬ .‫קומפילציה‬:‫דרכים‬ ‫משתי‬ ‫באחת‬ ‫לפעול‬ ‫ניתן‬ :‫פרמטרים‬ ‫ללא‬ ‫בנאי‬ ‫הבסיס‬ ‫מחלקת‬ ‫להגדרת‬ ‫להוסיף‬ ,‫הראשונה‬ BaseClass() { } :‫המחדל‬ ‫ברירת‬ ‫מבנאי‬ ‫ששונה‬ ,‫הבסיס‬ ‫במחלקת‬ ‫המוגדר‬ ‫לבנאי‬ ‫קריאה‬ ‫לבצע‬ ,‫השנייה‬ super ‫השמורה‬ ‫המילה‬ ‫את‬ ‫שוב‬ ‫להזכיר‬ ‫נכון‬ ,‫זו‬ ‫בנקודה‬super.‫בונות‬ ‫מתודות‬ ‫של‬ ‫בהקשר‬ ‫בה‬ ‫השימוש‬ ‫לגבי‬ ‫ולהסביר‬ ‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫ע"י‬ ‫תתבצע‬ ‫הבסיס‬ ‫מחלקת‬ ‫של‬ ‫לבנאי‬ ‫קריאה‬super. :‫לדוגמה‬ ‫הבא‬ ‫באופן‬ ‫תתבצע‬ ,‫הבסיס‬ ‫במחלקת‬ ‫המחדל‬ ‫ברירת‬ ‫מבנאי‬ ‫שונה‬ ‫לבנאי‬ ‫קריאה‬ super(3,"to",6); :‫לבנאי‬ ‫קריאה‬ ‫תתבצע‬ ‫זו‬ ‫בדרך‬ BaseClass(int a, String b, int c) { } .‫תתאפשר‬ ‫זו‬ ‫שקריאה‬ ‫כדי‬ ,‫בה‬ ‫מוגדר‬ ‫להיות‬ ‫צריך‬ ‫שהוא‬ ‫וכמובן‬ :‫הבא‬ ‫באופן‬ ‫הבהירות‬ ‫לשם‬ ‫ורק‬ ‫אך‬ ‫תיעשה‬ ‫וזו‬ ‫פרמטרים‬ ‫ללא‬ ‫לבנאי‬ ‫קריאה‬ ‫לבצע‬ ‫גם‬ ‫ניתן‬ super(); .‫מפורשות‬ ‫אותה‬ ‫נציין‬ ‫לא‬ ‫אם‬ ‫גם‬ ‫אוטומטית‬ ‫בצורה‬ ,‫כאמור‬ ,‫שמתבצעת‬ ‫קריאה‬ ‫זוהי‬ ‫בשורה‬ ‫להיעשות‬ ‫חייבת‬ ‫שכזו‬ ‫קריאה‬‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ‫של‬ ‫הראשונה‬. ‫שימוש‬ ‫תוך‬ ‫במחלקה‬ ‫אחרת‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬ ‫שגם‬ ‫הגדרנו‬ ‫שהרי‬ ,‫קונפליקט‬ ‫קיים‬ ‫שבתיאוריה‬ ‫מבינים‬ ‫אנו‬ ,‫זו‬ ‫בנקודה‬ ‫השמורה‬ ‫במילה‬this‫השמורה‬ ‫במילה‬ ‫שימוש‬ ‫תוך‬ ‫הבסיס‬ ‫ממחלקת‬ ‫בונה‬ ‫למתודה‬ ‫קריאה‬ ‫וגם‬super‫שתיהן‬ ‫חייבות‬ , ‫להיעשות‬‫הראשונה‬ ‫בשורה‬‫של‬‫נשאלת‬ ,‫כן‬ ‫אם‬ ...‫אחת‬ ‫רק‬ ‫יש‬ ‫ראשונה‬ ‫ששורה‬ ‫לכולנו‬ ‫וברור‬ ,‫הקוראת‬ ‫הבונה‬ ‫המתודה‬ ?‫השפה‬ ‫בדרישות‬ ‫סתירה‬ ‫כאן‬ ‫אין‬ ‫האם‬ ,‫השאלה‬ ‫לא‬ ‫שזה‬ ‫כמובן‬ ‫אך‬ ,‫כאחד‬ ‫וותיקים‬ ‫מתחילים‬ ‫תכניתנים‬ ‫נופלים‬ ‫אליה‬ ‫מלכודת‬ ‫במעין‬ ‫מדובר‬ .‫שאין‬ ‫היא‬ ‫הברורה‬ ‫התשובה‬ ,‫ובכן‬ ‫כד‬ ‫לפעול‬ ‫עלינו‬ ‫כיצד‬ ‫שנבין‬ ‫ע"מ‬ ‫מספיק‬‫הנכון‬ ‫השימוש‬ ‫אופן‬ ‫את‬ ‫ראשית‬ ‫להבין‬ ‫עלינו‬ ‫יהיה‬ ,‫כך‬ ‫לשם‬ .‫זו‬ ‫במלכודת‬ ‫ליפול‬ ‫לא‬ ‫י‬ ‫ע"י‬ ‫המחלקה‬ ‫אותה‬ ‫מתוך‬ ‫לבנאים‬ ‫בקריאה‬this‫מאליו‬ ‫ברור‬ ‫יהיה‬ ,‫יעיל‬ ‫באופן‬ ‫זו‬ ‫בטכניקה‬ ‫להשתמש‬ ‫כיצד‬ ‫שנבין‬ ‫לאחר‬ . .‫לעיל‬ ‫שתואר‬ ‫המלכודת‬ ‫למצב‬ ‫הפתרון‬ ‫משתמש‬ ‫אנו‬ ‫בגינה‬ ‫הסיבה‬ ‫מהי‬ ,‫עצמנו‬ ‫את‬ ‫נשאל‬ ‫ראשית‬‫ב‬ ‫ים‬-this‫אם‬ ?‫בנאי‬ ‫של‬ ‫הגדרתו‬ ‫מתוך‬ ‫אחר‬ ‫לבנאי‬ ‫קריאה‬ ‫לשם‬ .‫קוד‬ ‫בשורות‬ ‫חיסכון‬ ‫לשם‬ ‫נעשה‬ ‫שהדבר‬ ‫להסכים‬ ‫נוכל‬ ,‫זו‬ ‫בטכניקה‬ ‫לשימוש‬ ‫האמתית‬ ‫הסיבה‬ ‫על‬ ‫לעומק‬ ‫נחשוב‬ ‫תוך‬ ‫דפולטיביים‬ ‫ערכים‬ ‫אליו‬ ‫ישלחו‬ ‫הקונסטרקטורים‬ ‫ששאר‬ ‫זה‬ ‫יהיה‬ ‫פרמטרים‬ ‫הרבה‬ ‫הכי‬ ‫שמקבל‬ ‫שהבנאי‬ ‫הוא‬ ‫הרעיון‬ ‫לו‬ ‫קריאה‬‫באמצעות‬this‫לבנאי‬ ‫ממנו‬ ‫לקרוא‬ ‫צורך‬ ‫כבר‬ ‫אין‬ ,‫הפרמטרים‬ ‫כל‬ ‫את‬ ‫שמקבל‬ ‫זה‬ ‫והוא‬ ‫היות‬ ,‫הגדרתו‬ ‫שבתחום‬ ‫כך‬ , ‫ב‬ ‫בשימוש‬ ‫צורך‬ ‫באמת‬ ‫אין‬ ,‫כן‬ ‫ועל‬ ,‫פחות‬ ‫משוכלל‬-this‫ל‬ ‫שיקרא‬ ‫זה‬ ‫יהיה‬ ‫הוא‬ ‫ולכן‬ ‫בהגדרתו‬-super‫את‬ ‫פתרנו‬ ‫ובכך‬ .‫הבעיה‬
  • 7. :‫הנ"ל‬ ‫להסבר‬ ‫מימוש‬ ‫נראה‬ 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(); } }