Menu
Coddy logo textTech

ירושה בסיסית (extends)

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 20 מתוך 87.

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

ב-Java, יוצרים קשר ירושה באמצעות מילת המפתח extends. המחלקה שיורשת נקראת מחלקת משנה (או מחלקת בת), והמחלקה שממנה יורשים נקראת מחלקת על (או מחלקת אב).

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // קורא לבנאי של מחלקת האב
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

המחלקה Dog יורשת באופן אוטומטי את המתודה eat() ואת המתודה getName() מהמחלקה Animal. היא יכולה גם להגדיר מתודות משלה, כמו bark():

Dog myDog = new Dog("Buddy");
myDog.eat();   // עבר בירושה: "Buddy is eating"
myDog.bark();  // מתודה משלו: "Buddy says woof!"

חשבו על ירושה כעל קשר מסוג „הוא סוג של”. כלב הוא בעל חיים, ולכן הגיוני ש־Dog ירחיב את Animal. הקשר הזה מאפשר לכם ליצור מחלקות ייעודיות שמשתפות פונקציונליות משותפת ומוסיפות התנהגויות ייחודיות משלהן.

challenge icon

אתגר

קל

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

תארגנו את הקוד בשלושה קבצים:

  • Vehicle.java: צרו מחלקת־אב שמייצגת כל כלי רכב. צריכים להיות בה:
    • שדה פרטי עבור הbrand של כלי הרכב (String)
    • בנאי שמקבל את שם המותג ומשייך אותו לשדה. (אין צורך בקריאה ל־super() כאן, מכיוון ש־Vehicle נמצאת בראש ההיררכיה.)
    • מתודה getBrand() שמחזירה את המותג
    • מתודה start() שמדפיסה: [brand] is starting
  • Motorcycle.java: צרו מחלקת־בת שמרחיבה את Vehicle. אופנוע הוא כלי רכב, ולכן קשר מסוג "is-a" זה הופך את הירושה למתאימה. מחלקת Motorcycle שלכם צריכה:
    • להשתמש ב־extends כדי לרשת מ־Vehicle
    • להכיל בנאי שמקבל את המותג ומעביר אותו למחלקת־האב באמצעות super(brand)
    • להוסיף מתודה משלה wheelie() שמדפיסה: [brand] is doing a wheelie!
  • Main.java: חברו הכול יחד על ידי יצירת אובייקט Motorcycle והדגמת ההתנהגויות שהיא יורשת וההתנהגויות הייחודיות לה. תקבלו קלט אחד: שם המותג. הדפיסו שתי שורות באמצעות קריאה ל:
    • מתודת start() שירשה
    • מתודת wheelie() של Motorcycle

תקבלו קלט אחד: שם המותג (String) של האופנוע שלכם.

שימו לב איך ל־Motorcycle יש גישה אוטומטית ל־start() ול־getBrand() בלי לכתוב אותם מחדש — זה הכוח של הירושה!

נסו בעצמכם

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String brand = scanner.nextLine();
        
        // TODO: ליצור אובייקט Motorcycle עם המותג
        
        // TODO: לקרוא למתודה start() שהתקבלה בירושה
        
        // TODO: לקרוא למתודה wheelie()
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Java אונליין