Menu
Coddy logo textTech

סקירה של רמות הגישה

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

משני גישה קובעים מאילו מקומות ניתן לגשת לשדות ולמתודות. ב-Java יש ארבע רמות של בקרת גישה.

משנה גישהאותה מחלקהאותה חבילהמחלקה יורשתבכל מקום
privateכןלאלאלא
ברירת מחדל (ללא מילת מפתח)כןכןלאלא
protectedכןכןכןלא
publicכןכןכןכן
public class BankAccount {
    private double balance;      // רק במחלקה זו
    String accountType;          // ברירת מחדל: רק באותה חבילה
    protected String owner;      // אותה חבילה + מחלקות יורשות
    public String bankName;      // נגיש מכל מקום
}

private הוא המגביל ביותר — השתמשו בו לנתונים פנימיים שאסור לגשת אליהם ישירות לעולם. public הוא הפתוח ביותר — השתמשו בו למתודות שמחלקות אחרות צריכות לקרוא להן.

כשלא מציינים שום משנה גישה, Java משתמשת בגישה default (שנקראת גם גישה ברמת החבילה). כך הגישה מתאפשרת רק בתוך אותה חבילה.

class Helper {           // מחלקה עם גישת ברירת מחדל
    void assist() { }    // מתודה עם גישת ברירת מחדל
}

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

challenge icon

אתגר

קל

בואו נבנה מערכת רשומות של Student שמדגימה כיצד משנה גישה שולטים בנראות בין קבצים שונים.

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

  • Student.java: הגדירו מחלקת Student עם שדות המשתמשים ברמות גישה שונות:
    • שדה private: studentId (String) - נגיש רק בתוך מחלקת Student
    • שדה ברירת מחדל (ללא משנה גישה): grade (int) - נגיש בתוך אותה חבילה
    • שדה protected: name (String) - נגיש באותה חבילה ובמחלקות יורשות
    • שדה public: school (String) - נגיש מכל מקום
    כללו בנאי שמגדיר את כל ארבעת השדות, ומתודה public בשם getInfo() שמחזירה מחרוזת בפורמט: "[studentId] name - Grade grade at school"
  • Main.java: צרו אובייקט Student והדגימו לאילו שדות ניתן לגשת ישירות מחוץ למחלקה. הדפיסו ישירות את השדה school, ולאחר מכן הדפיסו את התוצאה של getInfo() כדי להציג את כל פרטי התלמיד.

תקבלו ארבעה קלטים: studentId, name, grade ו-school (בסדר הזה).

הפלט שלכם צריך להכיל שתי שורות: שם בית הספר שאליו ניגשים ישירות, ולאחריו פרטי התלמיד המלאים שמתקבלים מהמתודה getInfo().

נסו בעצמכם

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // קראו את ערכי הקלט
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int grade = Integer.parseInt(scanner.nextLine());
        String school = scanner.nextLine();
        
        // TODO: צרו אובייקט Student עם ערכי הקלט
        
        
        // TODO: הדפיסו את השדה school ישירות (ניתן לגשת אליו כי הוא public)
        
        
        // TODO: הדפיסו את התוצאה של getInfo() כדי להציג את כל המידע על התלמיד
        
    }
}
quiz iconבחנו את עצמכם

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

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

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