SlideShare 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

What's hot

Inheritance in Java.pdf
Inheritance in Java.pdfInheritance in Java.pdf
Inheritance in Java.pdf
kumari36
 
FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT
03062679929
 
Polymorphism In Java
Polymorphism In JavaPolymorphism In Java
Polymorphism In Java
Spotle.ai
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Concepts
thinkphp
 
Access modifiers in java
Access modifiers in javaAccess modifiers in java
Access modifiers in java
Madishetty Prathibha
 
Modular Programming in C
Modular Programming in CModular Programming in C
Modular Programming in C
bhawna kol
 
Polymorphism presentation in java
Polymorphism presentation in javaPolymorphism presentation in java
Polymorphism presentation in java
Ahsan Raja
 
Polymorphism in Python
Polymorphism in Python Polymorphism in Python
Polymorphism in Python
Home
 
Polymorphism in java
Polymorphism in javaPolymorphism in java
Polymorphism in java
Elizabeth alexander
 
enums
enumsenums
enums
teach4uin
 
Python-Polymorphism.pptx
Python-Polymorphism.pptxPython-Polymorphism.pptx
Python-Polymorphism.pptx
Karudaiyar Ganapathy
 
Introduction to method overloading & method overriding in java hdm
Introduction to method overloading & method overriding  in java  hdmIntroduction to method overloading & method overriding  in java  hdm
Introduction to method overloading & method overriding in java hdm
Harshal Misalkar
 
Control structures i
Control structures i Control structures i
Control structures i
Ahmad Idrees
 
Javascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big PictureJavascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big Picture
Manish Jangir
 
Advanced Python : Static and Class Methods
Advanced Python : Static and Class Methods Advanced Python : Static and Class Methods
Advanced Python : Static and Class Methods
Bhanwar Singh Meena
 
polymorphism
polymorphism polymorphism
polymorphism
Imtiaz Hussain
 
Object and class
Object and classObject and class
Object and class
mohit tripathi
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming Fundamentals
Shahriar Hyder
 
Inheritance in JAVA PPT
Inheritance  in JAVA PPTInheritance  in JAVA PPT
Inheritance in JAVA PPT
Pooja Jaiswal
 
Python: Multiple Inheritance
Python: Multiple InheritancePython: Multiple Inheritance
Python: Multiple Inheritance
Damian T. Gordon
 

What's hot (20)

Inheritance in Java.pdf
Inheritance in Java.pdfInheritance in Java.pdf
Inheritance in Java.pdf
 
FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT
 
Polymorphism In Java
Polymorphism In JavaPolymorphism In Java
Polymorphism In Java
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Concepts
 
Access modifiers in java
Access modifiers in javaAccess modifiers in java
Access modifiers in java
 
Modular Programming in C
Modular Programming in CModular Programming in C
Modular Programming in C
 
Polymorphism presentation in java
Polymorphism presentation in javaPolymorphism presentation in java
Polymorphism presentation in java
 
Polymorphism in Python
Polymorphism in Python Polymorphism in Python
Polymorphism in Python
 
Polymorphism in java
Polymorphism in javaPolymorphism in java
Polymorphism in java
 
enums
enumsenums
enums
 
Python-Polymorphism.pptx
Python-Polymorphism.pptxPython-Polymorphism.pptx
Python-Polymorphism.pptx
 
Introduction to method overloading & method overriding in java hdm
Introduction to method overloading & method overriding  in java  hdmIntroduction to method overloading & method overriding  in java  hdm
Introduction to method overloading & method overriding in java hdm
 
Control structures i
Control structures i Control structures i
Control structures i
 
Javascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big PictureJavascript Prototypal Inheritance - Big Picture
Javascript Prototypal Inheritance - Big Picture
 
Advanced Python : Static and Class Methods
Advanced Python : Static and Class Methods Advanced Python : Static and Class Methods
Advanced Python : Static and Class Methods
 
polymorphism
polymorphism polymorphism
polymorphism
 
Object and class
Object and classObject and class
Object and class
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming Fundamentals
 
Inheritance in JAVA PPT
Inheritance  in JAVA PPTInheritance  in JAVA PPT
Inheritance in JAVA PPT
 
Python: Multiple Inheritance
Python: Multiple InheritancePython: Multiple Inheritance
Python: Multiple Inheritance
 

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

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

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

תכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותתכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקות
 
ג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטים
ג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטיםג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטים
ג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטים
 
בדרך לפולימורפיזם - 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: : תחום הכרעה
 

More from מורן אלקובי

ג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיות
מורן אלקובי
 
ג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשה
מורן אלקובי
 
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
מורן אלקובי
 
MySQL - מילון השאילתא
MySQL - מילון השאילתאMySQL - מילון השאילתא
MySQL - מילון השאילתא
מורן אלקובי
 
SQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתוניםSQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתונים
מורן אלקובי
 
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
מורן אלקובי
 
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולותמתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מורן אלקובי
 
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרותמתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מורן אלקובי
 
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מורן אלקובי
 

More from מורן אלקובי (20)

ג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיות
 
ג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשה
 
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
 
MySQL - מילון השאילתא
MySQL - מילון השאילתאMySQL - מילון השאילתא
MySQL - מילון השאילתא
 
SQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתוניםSQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתונים
 
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
 
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולותמתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
 
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרותמתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
 
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
 

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

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