ݺߣ

ݺߣShare a Scribd company logo
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות
‫מתודות‬ ‫דריסת‬–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();
}
}

More Related Content

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

  • 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(); } }