מילת המפתח super
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 21 מתוך 87.
מילת המפתח super מאפשרת למחלקת משנה להפנות למחלקת האב שלה. היא חיונית כשצריך לגשת לחברים או לבנאים של מחלקת האב מתוך מחלקת הבת.
השימוש הנפוץ ביותר ב־super הוא קריאה לבנאי של מחלקת האב. זו חייבת להיות הפקודה הראשונה בבנאי של מחלקת המשנה:
public class Vehicle {
private String brand;
public Vehicle(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
}
public class Car extends Vehicle {
private int doors;
public Car(String brand, int doors) {
super(brand); // חייבת להיות השורה הראשונה
this.doors = doors;
}
}אפשר גם להשתמש ב־super כדי לקרוא למתודות של מחלקת האב, דבר שימושי במיוחד כאשר למחלקת המשנה יש מתודה בעלת אותו שם:
public class Animal {
public void makeSound() {
System.out.println("Some sound");
}
}
public class Cat extends Animal {
public void makeSound() {
super.makeSound(); // קורא לגרסה של Animal
System.out.println("Meow!");
}
}חשוב על super כעל ההפך מ־this. בעוד this מתייחס לאובייקט הנוכחי, super מתייחס לחלק של מחלקת האב באותו אובייקט. ההבחנה הזאת נעשית חיונית כשבונים היררכיות של מחלקות, שבהן מחלקות צאצא צריכות להרחיב את ההתנהגות של מחלקת האב במקום להחליף אותה לחלוטין.
אתגר
קלבואו נבנה מערכת למכשירי חשמל ביתיים שמדגימה כיצד מחלקות יורשות יכולות להשתמש ב-super כדי לקרוא לבנאים של מחלקת האב ולהרחיב את ההתנהגות של המתודות שלה.
תיצרו שלושה קבצים כדי לארגן את הקוד שלכם:
Appliance.java: צרו את מחלקת האב שמייצגת כל מכשיר חשמלי ביתי. צריכים להיות בה:- שדה פרטי עבור
brandשל המכשיר (String) - שדה פרטי עבור
wattage(int) - בנאי שמקבל את שני הערכים ומאתחל אותם
- מתודה
getBrand()שמחזירה את המותג - מתודה
getWattage()שמחזירה את ההספק - מתודה
getInfo()שמחזירה:[brand] - [wattage]W
- שדה פרטי עבור
WashingMachine.java: צרו מחלקה יורשת שמרחיבה את Appliance. למכונת כביסה יש את כל מה שיש למכשיר חשמלי, בנוסף לתכונות מיוחדות משלה:- שדה פרטי עבור
capacity(int), שמייצג את קיבולת הכביסה בק״ג - בנאי שמקבל מותג, הספק וקיבולת — השתמשו ב-
super(brand, wattage)כדי לאתחל את החלק של מחלקת האב, ואז הגדירו את הקיבולת - מתודה
getCapacity()שמחזירה את הקיבולת - מתודה
getInfo()שקוראת למתודהgetInfo()של מחלקת האב באמצעותsuper.getInfo()ומרחיבה אותה כך שתחזיר:[parent info], Capacity: [capacity]kg
- שדה פרטי עבור
Main.java: צרו מכונת כביסה והציגו את המידע המלא שלה. תקבלו שלוש קלטים: המותג (String), ההספק (int) והקיבולת (int). הדפיסו את התוצאה של קריאה ל-getInfo()במכונת הכביסה שלכם.
תקבלו שלושה קלטים: שם המותג, ההספק והקיבולת.
שימו לב של-super יש כאן שני תפקידים: קריאה לבנאי של מחלקת האב כדי לאתחל שדות שעברו בירושה, וקריאה למתודה של מחלקת האב כדי להרחיב את ההתנהגות שלה במקום להחליף אותה לחלוטין.
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// קראו את הקלטים
String brand = scanner.nextLine();
int wattage = scanner.nextInt();
int capacity = scanner.nextInt();
// TODO: צרו אובייקט WashingMachine עם ערכי הקלט
// TODO: הדפיסו את התוצאה של הקריאה ל-getInfo() על מכונת הכביסה
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין