שרשור בנאי מפורש ומפורש

שרשור קונסטרקטורים בג'אווה הוא פשוט מעשה של בנאי אחד שקורא לבנאי אחר דרך ירושה. זה קורה באופן מרומז כאשר בנויה תת-משנה: המשימה הראשונה שלו היא לקרוא לשיטת הבנאי של ההורה שלה. אבל מתכנתים יכולים להתקשר לבנאי אחר במפורש באמצעות מילות המפתח זה () או סופר (). ה זה () מילת מפתח קוראת אחרת בנאי עמוס יתר באותה הכיתה; ה סופר () מילת מפתח מכנה קונסטרוקטור שאינו ברירת מחדל בסיווג העל.

שרשור קונסטרוקטוראי מפורש

שרשור בנאי מתרחש באמצעות שימוש בירושה. המשימה הראשונה של שיטת בנאי תת-קלאס היא לקרוא לשיטת הבנייה של סופר-קלאס. זה מבטיח כי יצירת אובייקט תת-תחום מתחיל באתחול המחלקות שמעליו בשרשרת הירושה.

יכול להיות מספר שיעורים בשרשרת ירושה. כל שיטת בנאי קוראת את השרשרת עד שהשיעור בראש הושג ואתחל. ואז כל מחלקה עוקבת להלן מאתחלת כאשר השרשרת מתפתלת חזרה אל תת-המקור. תהליך זה נקרא שרשור בנאי.

שים לב ש:

  • קריאה מרומזת זו למעמד העל זהה כאילו תת המשנה כללה את סופר () מילת מפתח, כלומר סופר () משתמע כאן.
  • אם בנאי ללא טענות אינו נכלל בכיתה, ג'אווה יוצרת אחד מאחורי הקלעים ומזמינה אותו. המשמעות היא שאם הבנאי היחיד שלך נוקט ויכוח, עליך לעשות זאת במפורש תשתמש ב זה () או סופר () מילת מפתח כדי להפעיל אותה (ראה בהמשך).
instagram viewer

קחו למשל את החיה מציאת העל הזו שמורחבת על ידי יונק:

חיה בכיתה {
// בנאי
בעל חיים(){
 System.out.println ("אנחנו בשיעור הבנאי של בעלי חיים.");
}
}
יונק בכיתה מרחיב את בעלי החיים {
//constructor
יונק(){
 System.out.println ("אנחנו בכיתה של בנאי יונקים.");
}
}

עכשיו, בואו ניתח את יונק הכיתה:

שרשראות בכיתה ציבוריתבונים {
 /**
* @param טוען
*/
main static void main (מחרוזת [] args) {
יונק m = יונק חדש ();
}
}

כאשר התוכנית לעיל פועלת, ג'אווה מפעילה באופן מרומז קריאה למבנה בעלי החיים בכיתה העל, ואז לבונה של הכיתה. לפיכך, התפוקה תהיה:

אנחנו בשיעור הבנאי של בעלי החיים
אנחנו בכיתה של הבנאי של יונקים

שרשור בנאי מפורש באמצעות זה () או סופר ()

שימוש מפורש ב- זה () או סופר () מילות מפתח מאפשרות לך לקרוא לבנאי שאינו ברירת מחדל.

  • כדי לקרוא לבנאי ברירת מחדל שאינו ארגוני או לבנאי שעומס יתר מתוך אותה הכיתה, השתמש ב- זה () מילת מפתח.
  • כדי לקרוא לבנאי של מחלקת-על שאינו ברירת מחדל מכל סוג משנה, השתמש ב- סופר () מילת מפתח. לדוגמה, אם לסופר-העל יש בנאים מרובים, תת-klasse תמיד תרצה להתקשר לבנאי מסוים ולא לברירת המחדל.

שים לב שהשיחה לבנאי אחר חייבת להיות ההצהרה הראשונה במבנה או ג'אווה יזרוק שגיאת קומפילציה.

קחו למשל את הקוד שלמטה בו תת-klasse חדשה, קרניבור, יורשת משיעור היונקים שיורשת משיעור בעלי-החיים, ולכל מחלקה יש כעת בנאי שנוטל ויכוח.

להלן חיית המחלקה העל:

חיה בכיתה ציבורית
שם מחרוזת פרטי;
בעל חיים ציבורי (שם מחרוזת) // קונסטרוקטור עם ויכוח
{
this.name = שם;
System.out.println ("אני מוצא להורג קודם.");
}
}
שים לב שהבנאי לוקח כעת א שם מהסוג מחרוזת כפרמטר ושגוף הכיתה מתקשר זה () על הבנאי. ללא שימוש מפורש ב- זה שם, Java תיצור בונה ברירת מחדל ללא ארגומנטים ותפעיל זאת, במקום זאת.

להלן תת-החלב יונק:

יונק בכיתה ציבורית מרחיב את בעלי החיים {
יונק ציבורי (שם מחרוזת)
{
סופר (שם);
System.out.println ("אני מוצא להורג שני");
}
}

הקונסטרוקטור שלה גם לוקח ויכוח, והוא משתמש סופר (שם) להפעיל קונסטרוקטור ספציפי בכיתת העל שלו.

להלן תת-סוג אחר של קרניבור. זה יורש מהיונק:

קרניבור בכיתה ציבורית מאריכה את יונק {
קרניבור ציבורי (שם מחרוזת)
{
סופר (שם);
System.out.println ("אני מוצא להורג אחרון");
}
}

בעת הפעלה, שלושת קוביות הקוד הללו יודפסו:

אני מוצא להורג קודם.
אני מוצא להורג שני.
הוצאתי להורג אחרון.

לסכם מחדש: כאשר נוצרת מופע משיעור הקרניבור, הפעולה הראשונה בשיטת הבנאי שלה היא לקרוא לשיטת בנאי היונקים. כמו כן, הפעולה הראשונה בשיטת בנאי היונקים היא לקרוא לשיטת בנאי החיות. שרשרת שיחות שיטת בנאי מבטיחה שהמופע של האובייקט Carnivore אתחל כראוי את כל המחלקות בשרשרת הירושה שלו.