מודיפיירים לגישה ב-Java

מודיפיקטורי הגישה ב-Java משמשים לניהול גישה ב-Java. ב-Java ישנם שלושה מילים מפתח – private, protected ו- public. אין צורך להשתמש במודיפיקטורי הגישה בכל המקרים, ולכן יש לנו עוד אחד בשם "מודיפיקטורי גישה ברירת מחדל", "מודיפיקטורי גישה ברמת החבילה" או "אין מודיפיקטורי".

מודיפיקטורי הגישה ב-Java

אנחנו יכולים להשתמש במודיפיקטורי הגישה ב-Java עם מחלקות, משתנים ושיטות. ניתן להשתמש רק במודיפיקטורי הגישה "public" או "default" עם מחלקות ב-Java.

  1. אם מחלקה היא "public" אז אנחנו יכולים לגשת אליה מכל מקום, כלומר מכל מחלקה אחרת הנמצאת בחבילות אחרות וכו '
  2. ניתן להכיל רק מחלקה "public" אחת בקובץ מקור ושם הקובץ צריך להיות זהה לשם מחלקה הציבורית.
  3. אם למחלקה יש "גישה ברירת מחדל" אז ניתן לגשת לה רק ממחלקות אחרות באותה החבילה.

מודיפיקטורי הגישה ב-Java עם אב חלקה

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

מודיפיירי גישה ב-Java – מילת המפתח public

אם חבר מחלקה הוא "public", אז ניתן לגשת אליו מכל מקום. המשתנה או השיטה נגישים באופן גלובלי. זוהי הדרך הפשוטה ביותר לספק גישה לחברי המחלקה. עם זאת, כדאי להיזהר בשימוש במילת המפתח הזו עם משתנים של המחלקה, אחרת כל אחד יכול לשנות את הערכים. לרוב, משתנים של המחלקה נשמרים כפרטיים ומסופקות שיטות getter-setter לגישה אליהם.

מודיפיירי גישה ב-Java – מילת המפתח private

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

מודיפיקטורי גישה ב-Java – מילת מפתח protected

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

מודיפיקטורי גישה ב-Java – גישה ברירת מחדל

אם לחברת המחלקה לא צויין שום מודיפיקטור גישה, אז היא נתפסת עם גישת ברירת מחדל. כללי הגישה דומים למחלקות, וחברי המחלקה עם גישת ברירת המחדל יהיו נגישים למחלקות באותו החבילה בלבד. גישה זו היא יותר מוגבלת מאשר public ו-protected, אך פחות מוגבלת מ-private. (פחות נגיש) private < default < protected < public (נגיש ביותר) הטבלה למטה סוכמת את מודיפיקטורי הגישה למחלקה ביחס למחלקות שונות באותו החבילה או בחבילות אחרות ולתתי מחלקות. בואו נכתוב מספר מחלקות פשוטות כאשר נראה את מודיפיקטורי הגישה ב-Java בפעולה. TestA.java

package com.journaldev.access;

class TestA {

	public void methodPublic(){
		methodPrivate();
	}
	
	protected void methodProtected(){
		methodPrivate();
	}
	
	void methodDefault(){
		methodPrivate();
	}
	
	private void methodPrivate(){}
}

שימו לב שמחלקת TestA יש גישת ברירת מחדל והשיטה הפרטית של המחלקה נגישה לכל חלקי המחלקה אותה. TestB.java


package com.journaldev.access;

import com.journaldev.access.TestA;

public class TestB {

	public static void main(String args[]) {
		new TestA().methodPublic();
		new TestA().methodProtected();
		new TestA().methodDefault();

	}

	public void methodPublic() {

	}

	protected void methodProtected() {

	}

	void methodDefault() {

	}

	private void methodPrivate() {
	}

}

שימו לב ש-TestB נמצאת באותה החבילה כמו מחלקת TestA ולכן היא מסוגלת לגשת לחברי המחלקה שלה. חברים פרטיים אינם נגישים, אך כל החברים האחרים נגישים בשל החבילה הזו. TestC.java


package com.journaldev.access.child;

import com.journaldev.access.TestB;

public class TestC {

	public static void main(String[] args) {
		new TestB().methodPublic();
	}

}

מחלקת TestB נגישה משום שהיא public. רק חברים ציבוריים של מחלקת TestB נגישים, מכיוון ש-TestC אינה באותה החבילה ולא מחלקת מחלקת TestB. TestE.java


package com.journaldev.util;

import com.journaldev.access.TestB;

public class TestE extends TestB {

	public static void main(String[] args) {
		new TestB().methodPublic();
		new TestB().methodProtected(); // compile time error

		// עובד, גישה לשיטה מוגנת של מחלקה אב משתמשת בתת-מחלקה
		new TestE().methodProtected();

	}

}

מאחר והמחלקה TestE היא מחלקה מחורגת של TestB, אנו יכולים לגשת אל חברי המחלקה המוגנים של TestB דרך המחלקה הילד TestE. אם ננסה לגשת ישירות לשיטה המוגנת של מחלקת האב, נקבל שגיאת זמן קידום. זהו הכל בנושא מודפסי הגישה ב-Java, זה פשוט להבין. רק אל תתערב בין הגישה המוגדרת והמוגנת. דרך פשוטה לזכור היא שהגישה המוגדרת היא יותר מוגבלת מהגישה המוגנת וחברי המחלקה המוגנים נגישים בתתי-מחלקות. לאחרונה יצרתי סרטון להסבר על מודפי הגישה ב-Java בפרטיות, תוכל לצפות בו למטה ב-YouTube. https://www.youtube.com/watch?v=QKjnbC3UBtY

Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers