שינוי גישה 'פרטי' של Java

1. סקירה כללית

בשפת התכנות ג'אווה ניתן לסמן שדות, קונסטרוקטורים, שיטות ושיעורים בשינוי גישה. במדריך זה נדבר על ה- פְּרָטִי שינוי גישה ב- Java.

2. מילת המפתח

ה פְּרָטִי שינוי הגישה חשוב מכיוון שהוא מאפשר אנקפסולציה והסתרת מידע, שהם עקרונות הליבה של תכנות מונחה עצמים. אנקפסולציה אחראית על אוסף שיטות ונתונים, בעוד שהסתרת מידע היא תוצאה של אנקפסולציה - היא מסתירה את הייצוג הפנימי של האובייקט.

הדבר הראשון שיש לזכור הוא אלמנטים שהוכרזו כ- פְּרָטִי ניתן לגשת רק בכיתה בה הם מוכרזים.

3. שדות

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

ראשית, בואו ניצור עוֹבֵד שיעור המכיל כמה פְּרָטִי משתני מופע:

שכבה ציבורית עובד {פרטי מחרוזת privateId; מנהל בוליאני פרטי; // ...}

בדוגמה זו סימנו את ה- פרטי משתנה כ פְּרָטִי כי אנחנו רוצים להוסיף קצת היגיון לדור המזהים. וכפי שאנחנו יכולים לראות, עשינו את אותו הדבר עם מנהל תכונה מכיוון שאיננו רוצים לאפשר שינוי ישיר בשדה זה.

4. קונסטרוקטורים

בואו ניצור כעת פְּרָטִי בַּנַאִי:

עובד פרטי (מזהה מחרוזת, שם מחרוזת, מנהל בוליאני Attribute) {this.name = name; this.privateId = id + "_ID-MANAGER"; }

על ידי סימון הבנאי שלנו כ פְּרָטִיאנו יכולים להשתמש בו רק מתוך הכיתה שלנו.

בואו נוסיף a סטָטִי שיטה שתהיה הדרך היחידה שלנו להשתמש בזה פְּרָטִי בונה מבחוץ עוֹבֵד מעמד:

עובד סטטי ציבורי buildManager (מזהה מחרוזת, שם מחרוזת) {להחזיר עובד חדש (מזהה, שם, נכון); }

עכשיו אנחנו יכולים לקבל מופע של המנהל שלנו עוֹבֵד בכיתה פשוט על ידי כתיבה:

מנהל עובדים = Employee.buildManager ("123MAN", "בוב");

ומאחורי הקלעים, כמובן, ה buildManager שיטה קוראת שלנו פְּרָטִי בַּנַאִי.

5. שיטות

בואו כעת נוסיף a פְּרָטִי שיטה לשיעור שלנו:

ריק ריק setManager (מנהל בוליאני) {this.manager = מנהל; }

ונניח שמשום מה יש לנו כלל שרירותי בחברה שלנו, שרק עובד בשם "קרל" יכול להיות מקודם למנהל, אם כי כיתות אחרות אינן מודעות לכך. ניצור a פּוּמְבֵּי שיטה עם היגיון כלשהו כדי להתמודד עם כלל זה המכנה שלנו פְּרָטִי שיטה:

חלל ציבורי elevateToManager () {if ("Carl" .equals (this.name)) {setManager (true); }}

6. פְּרָטִי בִּפְעוּלָה

בואו נראה דוגמה כיצד להשתמש ב עוֹבֵד כיתה מבחוץ:

class public ExampleClass {public static void main (String [] args) {עובד שכיר = עובד חדש ("בוב", "ABC123"); employee.setPrivateId ("BCD234"); System.out.println (employee.getPrivateId ()); }}

לאחר ביצוע דוגמאקלאס, נראה את הפלט שלו בקונסולה:

BCD234_ID

בדוגמה זו השתמשנו ב- פּוּמְבֵּי בנאי וה פּוּמְבֵּי שיטה changeId (customId) כי אנחנו לא יכולים לגשת ל פְּרָטִי מִשְׁתַנֶה פרטי באופן ישיר.

בוא נראה מה קורה אם אנו מנסים לגשת אל פְּרָטִי שיטה, קונסטרוקטור או משתנה מבחוץ שלנו עוֹבֵד מעמד:

class class ExampleClass {public static void main (String [] args) {עובד שכיר = עובד חדש ("בוב", "ABC123", נכון); employee.setManager (נכון); employee.privateId = "ABC234"; }}

נקבל שגיאות אוסף לכל אחת מההצהרות הלא חוקיות שלנו:

הקונסטרוקטור עובד (מחרוזת, מחרוזת, בוליאני) אינו גלוי השיטה setManager (בוליאנית) מהסוג עובד אינו גלוי השדה Employee.privateId אינו גלוי

7. שיעורים

יש מקרה מיוחד אחד שבו נוכל ליצור פְּרָטִי מעמד - כמעמד פנימי של מעמד אחר כלשהו. אחרת, אם היינו מכריזים על מעמד חיצוני כ- פְּרָטִיהיינו אוסרים על כיתות אחרות לגשת אליו, מה שהופך אותו לחסר תועלת:

מחלקה ציבורית PublicOuterClass {public PrivateInnerClass getInnerClassInstance () {PrivateInnerClass myPrivateClassInstance = this.new PrivateInnerClass (); myPrivateClassInstance.id = "ID1"; myPrivateClassInstance.name = "בוב"; החזר את myPrivateClassInstance; } class class PrivateInnerClass {שם מחרוזת ציבורי; מזהה מחרוזת ציבורי; }}

בדוגמה זו, יצרנו a פְּרָטִי מעמד פנימי בתוך שלנו PublicOuterClass על ידי ציון ה- פְּרָטִי שינוי גישה.

כי השתמשנו ב- פְּרָטִי מילת מפתח, אם אנחנו, משום מה, נסה להסדיר את שלנו PrivateInnerClass מבחוץ PublicOuterClass, הקוד לא יצטבר ונראה את השגיאה:

לא ניתן לפתור את PrivateInnerClass לסוג

8. מסקנה

במדריך מהיר זה דנו ב פְּרָטִי שינוי גישה ב- Java. זו דרך טובה להשיג אנקפסולציה, מה שמוביל להסתרת מידע. כתוצאה מכך, אנו יכולים להבטיח שנחשוף רק את הנתונים וההתנהגויות שאנו רוצים לשיעורים אחרים.

כמו תמיד, דוגמת הקוד זמינה ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found