שיעורי מודול (2/2)
שיטות ועומס יתר
שיטות מגדירות את ההתנהגות של אובייקט. אנו יכולים לחשוב עליהם כעל פונקציות המוצהרות בתוך מחלקה הפועלות על שדות המופע של האובייקט או פרמטרים נכנסים.
הגדרת שיטה
שיטה ב-Java מורכבת מ:
- משנה גישה (לדוגמה,
public,private). - סוג החזרה (לדוגמה,
int,String, אוvoidאם זה לא מחזיר כלום). - שם השיטה ב-
camelCase. - פרמטרים מצורפים בסוגריים.
- גוף השיטה סגור בפלטה מתולתלת.
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Method with return type String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}קריאה לשיטה
כדי להפעיל שיטה על אובייקט שנוצר, אנו משתמשים בסימון נקודות .:
public class Main {
public static void main(String[] args) {
Person p = new Person("Marco");
String message = p.greet(); // Calling the method
System.out.println(message);
}
}עומס יתר של שיטה
ב-Java, לשתי שיטות או יותר בתוך אותה מחלקה יכולות להיות אותו שם, כל עוד יש להן רשימת פרמטרים שונה (במספר, בסדר או בסוגי פרמטרים). מושג זה ידוע בשם עומס יתר.
המהדר מחליט באיזו שיטה להפעיל על ידי ניתוח הארגומנטים שעברו במהלך השיחה.
class Printer {
// Method to print an integer
public void printValue(int number) {
System.out.println("Intero: " + number);
}
// Overloaded method to print a string
public void printValue(String text) {
System.out.println("Testo: " + text);
}
}פרמטר עובר לפי ערך
ב-Java, כל הפרמטרים מועברים לפי ערך (מעבר לפי ערך). המשמעות היא שכאשר אתה מעביר ארגומנט למתודה, Java יוצרת עותק של ערך המשתנה ומעבירה אותו למתודה.
- עבור טיפוסים פרימיטיביים, הערך המקורי מחוץ לשיטה לעולם לא משתנה, גם אם שונה בתוך השיטה.
- עבור אובייקטים/הפניות, ההפניה לאובייקט מועתקת. המשמעות היא שבעוד שאיננו יכולים לשנות את כתובת הזיכרון אליה מצביע האובייקט המקורי, אנו יכולים לשנות את המצב הפנימי שלו (למשל, השדות שלו) והשינויים הללו יהיו גלויים בחוץ.
מגבלות עומס יתר: סוג ההחזרה
חשוב לציין שלא ניתן להעמיס יתר על המידה בשיטה המבוססת רק על סוג ההחזרה. לדוגמה, הקוד הבא יגרום לשגיאת קומפילציה:
class Example {
// ERROR: The signature of the two methods is considered identical
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}המהדר צריך להבחין בין שיטות המבוססות רק על הפרמטרים כדי להחליט לאיזו גרסה לקרוא בזמן ההידור (עומס יתר נפתר בזמן ההידור).
נסה זאת בעצמך
הוסף שיטה public int add(int a, int b) למחלקה Calculator שמחזירה את הסכום של שני המספרים. בשיטה הראשית, קרא לשיטה זו על אובייקט calc והקצה את התוצאה למשתנה מספר שלם.
הצג רמז
הכריז על השיטה בתור `public int add(int a, int b) { return a + b; }` והפעל אותו בשיטה הראשית בתור `int result = calc.add(5, 10);`.
הפתרון זמין לאחר 3 ניסיונות
עומס יתר על המידה את שיטת התוספת במחלקה Calculator על ידי יצירת שיטה נוספת שמקבלת שני פרמטרים כפולים ומחזירה את הסכום שלהם.
הצג רמז
כתוב `public double add(double a, double b) { return a + b; }` ישירות מתחת לשיטת ההוספה הראשונה.
הפתרון זמין לאחר 3 ניסיונות
הוסף שיטה public int multiply(int a, int b) למחלקה Calculator שמחזירה את המכפלה של שני המספרים. בשיטה הראשית, קרא לשיטה זו על אובייקט calc והקצה את התוצאה למשתנה מספר שלם.
הצג רמז
הכריז על השיטה בתור `public int multiply(int a, int b) { return a * b; }` והפעל אותו בשיטה הראשית בתור `int result = calc.multiply(5, 10);`.
הפתרון זמין לאחר 3 ניסיונות