היתרונות והחסרונות של שיטת עומס יתר ב-Java

שיטות עמוסות יתר הן שיטות באותה מחלקה שחולקות את אותו השם אך מקבלים סוגי משתנים שונים כארגומנטים. לדוגמה, מחלקה עשויה להכיל שתי שיטות "הוסף" שונות: אחת שמקבלת שני ערכים כפולים, "הוסף (כפול a, כפול b)" ואחת שמקבלת שניים. ערכים שלמים, "add (int a, int b)." המחשב מחליט אוטומטית לאיזו שיטה להתקשר בזמן הריצה על סמך סוגי המשתנים המועברים ל- שיטה.

גְמִישׁוּת

שיטות עמוסות יתר נותנות למתכנתים את הגמישות לקרוא לשיטה דומה עבור סוגי נתונים שונים. אם אתה עובד על תוכנית מתמטיקה, למשל, אתה יכול להשתמש בעומס יתר כדי ליצור כמה שיעורים "הכפלה", שכל אחד מהם מכפיל מספר שונה של סוג ארגומנט: "כפל (int a, int b)" הפשוט ביותר מכפיל שניים מספרים שלמים; השיטה המסובכת יותר "כפל (כפול a, int b, int c)" מכפיל כפול אחד בשני מספרים שלמים -- אז אתה יכול קרא "כפיל" על כל שילוב של משתנים שיצרת עבורו שיטה עמוסה וקבל את התוצאה המתאימה.

סרטון היום

בונים

עומס יתר משמש גם על בנאים כדי ליצור אובייקטים חדשים בהינתן כמויות שונות של נתונים. לדוגמה, אתה יכול להשתמש בעומס יתר כדי ליצור שלושה בנאים שונים עבור אובייקט "בית" עם מספר בית, שם רחוב ומשתני צבע. הקונסטרוקטור הפשוט ביותר "House()" אינו לוקח ארגומנטים ויוצר בית עם משתני ברירת מחדל או ריקים. קונסטרוקטור מורכב יותר, "House (int houseNumber, String streetName)" יוצר בית עם מספר הבית ושם הרחוב שצוינו, אך ברירת מחדל או צבע ריק. הקונסטרוקטור המורכב ביותר, "House (int houseNumber, String streetName, String color)" יוצר בית עם כל המידע שצוין, ולא משאיר דבר כברירת מחדל. לאחר מכן תוכל ליצור אובייקט בית על סמך המידע הזמין כעת, כשהמידע הלא זמין נותר ריק או כברירת מחדל.

הפניות מעורפלות

שיטות עמוסות יתר חייבות להשתמש במספרים או סוגים שונים של ארגומנטים כדי למנוע אי בהירות. אם אתה יוצר שתי שיטות באותה מחלקה בעלות אותו שם ומקבל שני מספרים שלמים כארגומנטים, ה מהדר Java לא יוכל להבחין בין השניים, גם אם למשתני הקלט יש שמות שונים. לדוגמה, המתודה "add (int a, int b)" לא יכולה להתקיים באותה מחלקה כמו השיטה "add (int c, int d)."

סוגי החזרות

עליך להגדיר סוג החזרה עבור כל שיטה עמוסה מדי. לשיטות יכולות להיות סוגי החזרה שונים -- לדוגמה, "add (int a, int b)" עשוי להחזיר מספר שלם, בעוד "add (double a, double b)" מחזיר כפול. עם זאת, Java לא יכולה להבחין בין שתי שיטות שונות על סמך סוג ההחזר שלהן. לכן, "כפל כפול (כפול a, כפול b)" לא יכול להתקיים באותה מחלקה כמו "כפול כפול (כפול a, כפול b)."