logo

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

  1. דרכים שונות להעמיס על השיטה
  2. על ידי שינוי מס'. של טיעונים
  3. על ידי שינוי סוג הנתונים
  4. מדוע העמסת יתר של השיטה אינה אפשרית על ידי שינוי סוג ההחזרה
  5. האם נוכל להעמיס על השיטה העיקרית
  6. עומס יתר בשיטה עם קידום סוג

אם מעמד יש שיטות מרובות בעלות שם זהה אך שונות בפרמטרים, היא ידועה בשם עומס יתר של שיטה .

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

תערובת הומוגנית

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

אז, אנו מבצעים עומס יתר של שיטה כדי להבין את התוכנית במהירות.

עומס יתר בשיטת java

יתרון של עומס יתר בשיטה

עומס יתר בשיטה מגביר את קריאות התוכנית .

דרכים שונות להעמיס על השיטה

ישנן שתי דרכים להעמיס על השיטה ב-java

  1. על ידי שינוי מספר הארגומנטים
  2. על ידי שינוי סוג הנתונים

ב-Java, Method Overloading אינו אפשרי על ידי שינוי סוג ההחזרה של השיטה בלבד.


1) עומס יתר של שיטה: שינוי מס. של טיעונים

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

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

 class Adder{ static int add(int a,int b){return a+b;} static int add(int a,int b,int c){return a+b+c;} } class TestOverloading1{ public static void main(String[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); }} 
בדוק את זה עכשיו

תְפוּקָה:

 22 33 


2) עומס יתר של שיטה: שינוי סוג הנתונים של ארגומנטים

בדוגמה זו, יצרנו שתי שיטות השונות בינהן בדוק את זה עכשיו

תְפוּקָה:

 22 24.9 

ש) מדוע העמסת יתר של שיטה אינה אפשרית על ידי שינוי סוג ההחזרה של השיטה בלבד?

ב-java, עומס יתר של השיטה אינו אפשרי על ידי שינוי סוג ההחזר של השיטה רק בגלל אי ​​בהירות. בוא נראה איך אי בהירות עשויה להתרחש:

 class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }} 
בדוק את זה עכשיו

תְפוּקָה:

 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Adder.add(11,11)); //כאן, איך java יכולה לקבוע לאיזו שיטת sum() יש לקרוא?

הערה: שגיאת זמן קומפילציה טובה יותר משגיאת זמן ריצה. לכן, מהדר Java יוצר שגיאת זמן מהדר אם אתה מצהיר על אותה שיטה בעלת אותם פרמטרים.

האם נוכל להעמיס יתר על המידה בשיטת java main()?

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

 class TestOverloading4{ public static void main(String[] args){System.out.println('main with String[]');} public static void main(String args){System.out.println('main with String');} public static void main(){System.out.println('main without args');} } 
בדוק את זה עכשיו

תְפוּקָה:

 main with String[] 

עומס יתר וקידום סוגים

סוג אחד מקודם לאחר באופן מרומז אם לא נמצא סוג נתונים תואם. בואו נבין את הרעיון לפי האיור המופיע להלן:

מחרוזת מרובת שורות של javascript
עומס יתר בשיטת Java עם קידום סוג

כפי שמוצג בתרשים לעיל, ניתן לקדם בייט לקצר, int, ארוך, צף או כפול. ניתן לקדם את סוג הנתונים הקצר ל-int, long, float או double. ניתן לקדם את סוג הנתונים של ה-char ל-int, long, float או double וכן הלאה.

דוגמה להעמסת יתר של שיטה עם TypePromotion

 class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } } 
בדוק את זה עכשיו
 Output:40 60 

דוגמה לעומס יתר של שיטה עם קידום סוג אם נמצאה התאמה

אם יש ארגומנטים מסוג תואמים בשיטה, קידום סוג לא מבוצע.

 class OverloadingCalculation2{ void sum(int a,int b){System.out.println('int arg method invoked');} void sum(long a,long b){System.out.println('long arg method invoked');} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20);//now int arg sum() method gets invoked } } 
בדוק את זה עכשיו
 Output:int arg method invoked 

דוגמה להעמסת יתר של שיטה עם קידום סוג במקרה של אי בהירות

אם אין ארגומנטים מסוג תואם בשיטה, וכל שיטה מקדמת מספר דומה של ארגומנטים, תהיה אי בהירות.

 class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } } 
בדוק את זה עכשיו
 Output:Compile Time Error 

סוג אחד לא מבוטל במרומז, לדוגמה, אי אפשר לבטל קידום כפול לשום סוג באופן מרומז.