מילת המפתח super
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 37 מתוך 110.
מילת המפתח super מאפשרת למחלקת בת גישה ישירה למחלקת האב שלה. כבר ראית אותה בבנאים עם super(name), אבל היא שימושית גם בהקשרים אחרים.
כשצריך לקרוא לבנאי של מחלקת האב, super מעביר ארגומנטים במעלה שרשרת הירושה:
class Vehicle {
String brand;
int year;
Vehicle(this.brand, this.year);
}
class Car extends Vehicle {
int doors;
Car(String brand, int year, this.doors) : super(brand, year);
}מילת המפתח super מאפשרת גם לגשת לשיטות ולמאפיינים של מחלקת האב מתוך מחלקת הבת. זה שימושי במיוחד כשרוצים להשתמש בהתנהגות של מחלקת האב לצד ההתנהגות שלכם:
class Animal {
String name;
Animal(this.name);
void makeSound() {
print('$name makes a sound');
}
}
class Cat extends Animal {
Cat(String name) : super(name);
void makeSound() {
super.makeSound(); // קרא קודם למתודה של מחלקת האב
print('$name says meow!');
}
}כשאתה קורא ל־super.makeSound(), אתה מפעיל במפורש את הגרסה של המתודה במחלקת האב. בלי super, קריאה ל־makeSound() תתייחס למתודה של המחלקה הנוכחית, ועלולה לגרום לרקורסיה אינסופית.
חשוב על super כאילו אתה אומר "השתמש בגרסה של ההורה שלי" — בין אם זו בנאית, מתודה או מאפיין.
אתגר
קלבואו נבנה מערכת הודעות שמדגימה כיצד מילת המפתח super מאפשרת למחלקות בת לגשת להתנהגות של מחלקת האב שלהן ולהרחיב אותה. תיצרו היררכיה שבה סוגי הודעות שונים מתבססים על מחלקת הודעה בסיסית.
תארגנו את הקוד בשני קבצים:
message.dart: הגדירו כאן את מחלקות ההודעות:- מחלקת
Message(מחלקת האב) עםString senderו-String content. הוסיפו בנאי שמקבל את שני הערכים, ומתודהdisplay()שמדפיסהFrom [sender]: [content] - מחלקת
UrgentMessageשמרחיבה אתMessage. צריכה להיות לה תכונה נוספתString priority. הבנאי מקבל שולח, תוכן ועדיפות, ומעביר את שני הערכים הראשונים למחלקת האב באמצעותsuper. דרסו את המתודהdisplay()כך שתחילה תקרא לגרסה של מחלקת האב באמצעותsuper.display(), ולאחר מכן תדפיס בשורה הבאהPriority: [priority]
- מחלקת
main.dart: ייבאו את קובץ ההודעות והדגימו כיצדsuperפועלת גם בבנאים וגם במתודות:- צרו
Messageרגילה מאת'Alice'עם התוכן'Hello there!' - קראו למתודה
display()שלה - הדפיסו שורה ריקה להפרדה
- צרו
UrgentMessageמאת'Bob'עם התוכן'Server is down!'ובעדיפות'HIGH' - קראו למתודה
display()שלה
- צרו
שימו לב כיצד UrgentMessage משתמשת ב-super בשתי דרכים: בבנאי כדי להעביר נתונים למחלקת האב, ובמתודה שנדרסה כדי לכלול את הפלט של מחלקת האב לפני הוספת הפלט שלה.
פלט צפוי:
From Alice: Hello there!
From Bob: Server is down!
Priority: HIGHנסו בעצמכם
import 'message.dart';
void main() {
// TODO: צרו Message רגילה מאת 'Alice' עם התוכן 'Hello there!'
// TODO: קראו למתודה display() על ההודעה
// TODO: הדפיסו שורה ריקה להפרדה
// TODO: צרו UrgentMessage מאת 'Bob' עם התוכן 'Server is down!' והעדיפות 'HIGH'
// TODO: קראו למתודה display() על ההודעה הדחופה
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםספריות וייבואמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותמשתני מופעיסודות הבנאיחזרה: מחשבון פשוט4בטיחות מפני ערכי null
מבוא לבטיחות מפני ערכי nullניתן להקצאה ל-null לעומת לא ניתן להקצאה ל-nullהאופרטורים ? ו-!מילת המפתח Late ובטיחות מפני ערכי nullאופרטורים מודעי nullבטיחות מפני ערכי null במחלקותסיכום – מערכת פרופילי משתמשים7מחלקות מופשטות וממשקים
מחלקות מופשטותמתודות מופשטותממשקים ב-Dartממשקים משתמעיםמימוש לעומת הורשהממשקים מרוביםחזרה – מחשבון צורות10אוספים וגנריות
סקירה כללית של List, Set ו-Mapאוספים בטוחים מבחינת טיפוסיםמחלקות גנריותמתודות גנריותאילוצים גנרייםIterable ו-Iteratorסיכום – אחסון גנרי13מושגי OOP מתקדמים
הרכבה לעומת הורשהמתודות הרחבהמחלקות קריאותמחלקות אטומות (Dart 3)רשומות (Dart 3)תבניות והתאמה (3.0)טיפוסים מונים עם מתודות16פרויקט: ניהול ספרייה
סקירת הפרויקטמחלקות ספר ומשתמש2בנאים ב-Dart
בנאי ברירת מחדלבנאים בעלי שםרשימות אתחולבנאים קבועיםבנאי Factoryבנאים מפניםסיכום - בונה צורות5כימוס
חברים ציבוריים לעומת פרטייםמוסכמת הקידומת _פרטיות ברמת הספרייההעמקה ב-getters וב-settersהסתרת מידעסיכום – רשומות תלמידים8מיקסינים
מבוא למיקסיניםיצירת מיקסיניםשימוש במספר מיקסיניםמילת המפתח on במיקסיניםמיקסינים לעומת ירושהמיקסינים לעומת ממשקסיכום – מערכת בעלי החיים3מאפייני מחלקה
איברי מופע לעומת איברים סטטייםשדות final ו-constמשתני lateמתודות ושדות סטטייםGetters ו-Settersסיכום – מנהל חשבונות בנק6ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותהאנוטציה @overrideמילת המפתח final למחלקהבנאים וירושהסיכום – היררכיית עובדים9פולימורפיזם
יסודות הפולימורפיזםפולימורפיזם באמצעות ממשקיםבדיקת טיפוסים בזמן ריצההאופרטורים is ו-asמילת המפתח קווריאנטיסיכום — מעבד תשלומים12תכנות מונחה עצמים אסינכרוני
Future-ים ו-async/awaitיסודות ה-Streamsבקרי Streamsבנאים אסינכרונייםאסינכרוניות במתודות של מחלקהסיכום - אחזור נתוניםתרגלו בעצמכם: קומפיילר Dart אונליין