משתנה ושיטת הסתרה בג'אווה

1. הקדמה

במדריך זה, נלמד על הסתרת משתנים ושיטות בשפת Java.

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

2. הסתרה משתנה

הסתרה משתנה מתרחשת כאשר אנו מכריזים על נכס בהיקף מקומי ששמו זהה לזה שכבר יש לנו בהיקף החיצוני.

לפני שנקפוץ לדוגמאות, בואו נסכם בקצרה את היקפי המשתנים האפשריים ב- Java. אנו יכולים להגדיר אותם באמצעות הקטגוריות הבאות:

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

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

2.1. כוחו של המקומי

בואו נסתכל על ה- HideVariable מעמד:

מחלקה ציבורית HideVariable {private String message = "זה משתנה מופע"; HideVariable () {String message = "משתנה מקומי קונסטרוקטור"; System.out.println (הודעה); } public void printLocalVariable () {String message = "שיטת משתנה מקומי"; System.out.println (הודעה); } print public void printInstanceVariable () {String message = "שיטה משתנה מקומי"; System.out.println (הודעה זו); }}

הנה לנו את הוֹדָעָה משתנה שהוכרז בארבעה מקומות שונים. המשתנים המקומיים המוצהרים בתוך הקונסטרוקטור ושתי השיטות מצלים על משתנה המופע.

בואו לבדוק את אתחול האובייקט וקריאת השיטות:

משתנה HideVariable = חדש HideVariable (); variable.printLocalVariable (); variable.printInstanceVariable ();

פלט הקוד שלעיל הוא:

שיטת משתנה מקומי קונסטרוקטור משתנה מקומי זה משתנה מופע

הנה, שתי השיחות הראשונות מאחזרות את המשתנים המקומיים.

כדי לגשת למשתנה המופע מההיקף המקומי, נוכל להשתמש זֶה מילת מפתח כמו שהיא מוצגת ב printInstanceVariable () שיטה.

2.2. מסתור והיררכיה

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

נניח שיש לנו את כיתת ההורים:

class public ParentVariable {String instanceVariable = "משתנה אב"; חלל ציבורי printInstanceVariable () {System.out.println (instanceVariable); }}

לאחר מכן אנו מגדירים כיתת ילדים:

מחלקה ציבורית ChildVariable מרחיב את ParentVariable {String instanceVariable = "משתנה ילד"; public public space printInstanceVariable () {System.out.println (instanceVariable); }}

כדי לבדוק את זה, בוא נתחיל שני מופעים. אחד עם כיתת הורים ועוד אחד עם הילד ואז קוראים printInstanceVariable () שיטות על כל אחד מהם:

ParentVariable parentVariable = חדש ParentVariable (); ParentVariable childVariable = חדש ChildVariable (); parentVariable.printInstanceVariable (); childVariable.printInstanceVariable ();

הפלט מראה את המאפיין המסתתר:

משתנה הורה משתנה

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

3. הסתרת שיטה

הסתרת שיטות עשויה להתרחש בכל מבנה היררכיה בג'אווה. כאשר כיתת ילדים מגדירה שיטה סטטית עם אותה חתימה כמו שיטה סטטית בכיתת ההורים, אזי השיטה של ​​הילד מסתיר זה בכיתת ההורים. למידע נוסף על סטָטִי מילת מפתח, כתיבה זו היא מקום טוב להתחיל בו.

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

עכשיו, בואו נסתכל על הדוגמה המעשית הזו:

class class BaseMethodClass {public static void printMessage () {System.out.println ("שיטה סטטית בסיסית"); }}

BaseMethodClass יש סינגל printMessage () סטטי שיטה.

לאחר מכן, בואו ליצור כיתת ילדים עם אותה חתימה כמו בכיתת הבסיס:

class public ChildMethodClass מרחיב את BaseMethodClass {public static void printMessage () {System.out.println ("שיטה סטטית לילד"); }}

ככה זה עובד:

ChildMethodClass.printMessage ();

הפלט לאחר קריאת ה- printMessage () שיטה:

שיטה סטטית לילד

ה ChildMethodClass.printMessage () מסתיר את השיטה ב BaseMethodClass.

3.1. שיטת הסתרה לעומת עקיפה

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

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

4. מסקנה

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

כרגיל, הקוד השלם זמין ב- GitHub.


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