בתכנות מונחה עצמים, קונסטרוקטור הוא פונקציה מיוחדת שאתה קורא לה ליצור אובייקט. לבנאים יש כמה מאפיינים ייחודיים המאפשרים להם לעבוד.
ב- Java, אתה שם לבנאי על שם השיעור שלו. קונסטרוקטור הוא שיטה, המוגדרת בכיתה עליה היא חלה. בוני Java עשויים להשתמש בעומס יתר על מנת לספק התנהגות חלופית. בנאים בג'אווה יכולים גם לעשות שימוש בירושה כדי לעשות שימוש חוזר בקוד.
למה בכל זאת צריך קונסטרוקטורים?
קונסטרוקטורים הם עמוד התווך של תכנות מונחה עצמיםו- Java אינה יוצאת דופן. דוגמה זו מראה כיצד ניתן להגדיר מחלקת מעגל בסיסית עם מאפיין נתונים אחד ושיטה אחת:
מעגל כיתה ציבורית {
רדיוס כפול ציבורי;
שטח כפול ציבורי () {להחזיר 3.14159 * רדיוס * רדיוס; }
}
לאחר מכן תוכל ליצור מופע של מחלקה זו ולתקשר איתה:
מעגל c = מעגל חדש ();
c.radius = 2;
System.out.println (c.area ()); // 12.56636
אבל זה פחות נוח וחזק ממה שזה יכול להיות. נוהג מכוון עצמים טוב הוא לכמוס נתונים ולהגן עליהם מפני גישה בלתי מורשית:
מעגל כיתה ציבורית {
פְּרָטִי רדיוס כפול;
שטח כפול ציבורי () {להחזיר 3.14159 * רדיוס * רדיוס; }
בטל פומבי setRadius (כפול r) {רדיוס = r; }
}
כעת קוד השיחות יכול להשתמש ב- setRadius שיטה ולא צריך לדאוג לפרטי היישום שלה:
מעגל c = מעגל חדש ();
c.setRadius (2);
קונסטרוקטורים מציעים דרך טובה יותר לספק נתונים לאובייקט בעת היצירה. הם משמשים לעתים קרובות לאתחול של מאפיינים, כגון רַדִיוּס פה.
דוגמאות לבונים פשוטים
הבנאי הבסיסי ביותר הוא אחד ללא ויכוחים, שאינו עושה דבר:
מעגל כיתה ציבורית {
מעגל ציבורי () {}
}
ראה גם: למד כיצד ליצור שיעורים בג'אווה
אם אתה לא מגדיר קונסטרוקטור, Java תספק ברירת מחדל שמתנהגת באותו אופן.
שימו לב לכמה דברים:
- שם הבנאי תואם את שם הכיתה.
- קונסטרוקטור זה משתמש ב- פּוּמְבֵּי משנה גישה, כך שכל קוד אחר יכול לקרוא לזה.
- קונסטרוקטור אינו כולל סוג החזרה. בניגוד לשיטות אחרות, בונים אינם יכולים להחזיר ערך.
קונסטרוקטורים בדרך כלל מבצעים אתחול כלשהו. שים לב שהקוד שלעיל אינו מאותחל את ערך הרדיוס. במקרה זה, השפה תגדיר אותה אוטומטית לאפס. מחלקה זו מצפה ממשתמש להשתמש setRadius (). כדי להשתמש בברירת מחדל שימושית יותר מ- 0, תוכל להקצות אותה בתוך הבנאי:
מעגל כיתה ציבורית {
מעגל ציבורי () {רדיוס = 1; }
}
במעגלים שנוצרו בכיתה זו לפחות יהיה שטח ממשי! המתקשר עדיין יכול להשתמש setRadius () לספק רדיוס שאינו 1. אבל הקונסטרוקטור יכול להיות יותר ידידותי:
מעגל כיתה ציבורית {
מעגל ציבורי (r כפול) {רדיוס = r; }
}
עכשיו אתה יכול ליצור מעגלים ברדיוס ספציפי כבר מהלידה:
מעגל c = מעגל חדש (2);
System.out.println (c.area ()); // 12.56636
זהו שימוש נפוץ מאוד עבור בונים. לעתים קרובות תשתמש בהם כדי לאתחל משתנים לערכי פרמטרים.
עומס קונסטרוקטור
אתה יכול לציין יותר מבנאי אחד בהגדרת כיתה:
מעגל ציבורי () {רדיוס = 1; }
מעגל ציבורי (r כפול) {רדיוס = r; }
זה נותן לקוד החיוג אפשרות לבחור כיצד לבנות אובייקטים:
מעגל c1 = מעגל חדש (2);
מעגל c2 = מעגל חדש ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159
עם מעגל מורכב מעט יותר, תוכלו לחקור קונסטרוקציות מעניינות יותר. גרסה זו שומרת את עמדתה:
מעגל כיתה ציבורית {
כפול ציבורי x, y, רַדִיוּס;
מעגל ציבורי () {רדיוס = r; }
מעגל ציבורי (r כפול) {רדיוס = r; }
מעגל ציבורי (כפול x, כפול y, כפול r) {
this.x = x; this.y = y; רדיוס = r;
}
שטח כפול ציבורי () {להחזיר 3.14159 * רדיוס * רדיוס; }
}
כעת תוכל ליצור מעגל ללא ארגומנטים, רדיוס יחיד או קואורדינטות x ו- y לצד הרדיוס. זהו אותו סוג של עומס יתר בו תומכת ג'אווה בכל שיטה.
שרשרת קונסטרוקטור
מה דעתך ליצור מעגל אחד, על בסיס אחר? זה ייתן לנו את היכולת להעתיק מעגלים בקלות. שימו לב לחסימה הבאה:
מעגל ציבורי (מעגל ג) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}
זה יעבוד, אבל זה חוזר על קוד כלשהו שלא לצורך. מכיוון שכבר בכיתת המעגל יש קונסטרוקטור המטפל בתכונות הבודדות, אתה יכול לקרוא לזה במקום זאת באמצעות ה- זֶה מילת מפתח:
מעגל ציבורי (מעגל ג) {
זה (c.x, c.y, c.radius);
}
זו צורה אחת של שרשור קונסטרוקטורים, המכנה קונסטרוקטור אחד מהשני. הוא משתמש בפחות קוד ועוזר לריכוז פעולה במקום לשכפל אותה.
מתקשר לבנאי ההורים
הצורה האחרת של שרשור קונסטרוקטור מתרחשת כאשר קונסטרוקטור מתקשר לבנאי ממחלקת האם שלו. זה יכול להיות מפורש או מרומז. כדי להתקשר לבנאי הורה במפורש, השתמש ב סוּפֶּר מילת מפתח:
סופר (x, y);
דמיין שכיתת צורה מתנהגת כהורה של המעגל:
צורה בכיתה ציבורית {
כפול x, y;
צורה ציבורית (כפול _x, כפול _y) {x = _x; y = _y; }
}
הוא מטפל במיקום משותף לכל הצורות מכיוון שזו פונקציונליות שכולם חולקים. כעת מחלקת המעגל יכולה להאציל את הטיפול בתפקידים להורה:
מעגל כיתה ציבורית מרחיב את הצורה {
רדיוס כפול;
מעגל ציבורי (r כפול) {סופר (0, 0); רדיוס = r; }
מעגל ציבורי (כפול x, כפול y, כפול r) {
סופר (x, y);
רדיוס = r;
}
}
בניית מעמד על היא היבט חשוב מאוד של ירושה בג'אווה. השפה אוכפת אותה כברירת מחדל אם אינך מתקשר במפורש סוּפֶּר בבונים שלך.
הגשני משנים על קונסטרוקטורים
בנאים יכולים לכלול שינוי גישה בחתימתם. כמו שיטות אחרות, זה מגדיר אילו סוגים של מתקשרים יכולים לגשת לבנאי:
מבחן בכיתה ציבורית {
מבחן סטטי פרטי uniqueInstance = מבחן חדש ();
מבחן פרטי () {}
מבחן סטטי ציבורי getInstance () {
החזר ייחודי
}
}
זו דוגמה מסובכת יותר, אז דאג להבין אותה:
- הכיתה איננה מופשטת, כך שאפשר להתקיים ממנה.
- הקונסטרוקטור הוא פרטי ולכן רק מחלקה זו עצמה יכולה ליצור מופע חדש.
- באמצעות מאפיין ושיטה סטטית, המחלקה חושפת מופע יחיד וייחודי של עצמה בפני המתקשרים.
השתמש בבונים ב- Java כדי ליצור אובייקטים
קונסטרוקטורים חיוניים לתכנות מונחה עצמים. הם מאפשרים לך ליצור אובייקטים, וזה חיוני!
בג'אווה, בונים נראים כמו שיטות אחרות ופועלים בצורה זהה. עליכם לזכור את הכללים המיוחדים סביב בוני ברירת מחדל, עומס יתר ושרשור קונסטרוקטורים. אם בונים חדשים עבורך, כדאי לך לקרוא על מושגי הליבה האחרים של Java שעליך ללמוד בעת תחילת העבודה.
בין אם אתה כותב ממשק משתמש (GUI), מפתח תוכנה בצד השרת או יישום נייד באמצעות Android, לימוד Java ישרת אותך היטב. להלן מספר מושגי ליבה של Java שיעזרו לך להתחיל.
קרא הבא
- תִכנוּת
- ג'אווה
- טיפים לקידוד
בובי הוא חובב טכנולוגיה שעבד כמפתח תוכנה במשך רוב שני העשורים. הוא נלהב ממשחקים, עובד כעורך ביקורות במגזין Switch Player, והוא שקוע בכל ההיבטים של פרסום מקוון ופיתוח אתרים.
הירשם לניוזלטר שלנו
הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!
צעד אחד נוסף !!!
אנא אשר את כתובת הדוא"ל שלך בדוא"ל ששלחנו לך זה עתה.