Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
‫פנימיות‬ ‫מחלקות‬–Inner Classes‫האובייקט‬ ‫של‬ ‫ולמתודות‬ ‫למשתנים‬ ‫גישה‬ ‫שלה‬ ‫למופע‬ ‫יש‬ ‫כן‬ ‫ועל‬ ‫אחרת‬ ‫מחלקה‬ ‫...
‫החיצונית‬ ‫מהמחלקה‬ ‫לאובייקט‬ ‫ברפרנס‬ ‫טמון‬ ‫החיצונית‬ ‫המחלקה‬ ‫של‬ ‫זה‬ ‫לבין‬ ‫הפנימית‬ ‫המחלקה‬ ‫של‬ ‫האובייקט‬ ‫ב...
,‫בשמה‬ ‫הפנימית‬ ‫למחלקה‬ ‫לקרוא‬ ‫מספיק‬ ,‫העוטפת‬ ‫המחלקה‬ ‫של‬ ‫ההכרה‬ ‫בטווח‬ ‫נמצאים‬ ‫אנו‬ ‫כאשר‬ ,‫המחלקה‬ ‫שם‬ ‫מ...
.‫אנונימית‬ ‫פנימית‬ ‫מחלקה‬ ‫של‬ ‫למימוש‬ ‫דוגמה‬ ‫נראה‬‫היררכיית‬ ‫את‬ ‫נבחן‬:‫המחלקות‬ ‫והגדרת‬public class Human {publ...
‫ב‬ ‫ניצור‬-main‫מטיפוס‬ ‫אובייקט‬Person‫את‬ ‫עליו‬ ‫נפעיל‬ ,use():‫הבא‬ ‫הפלט‬ ‫את‬ ‫ונקבל‬******************************...
‫סטטיות‬ ‫פנימיות‬ ‫מחלקות‬–Static Nested Classes.)‫רגילה‬ ‫למחלקה‬ ‫(בניגוד‬ ‫כסטטית‬ ‫להגדרה‬ ‫ניתנת‬ ‫פנימית‬ ‫מחלקה‬‫ז...
ג'אווה - תכנות מונחה עצמים - מחלקות פנימיות - רגילות, אנונימיות וסטטיות
Upcoming SlideShare
Loading in …5
×

ג'אווה - תכנות מונחה עצמים - מחלקות פנימיות - רגילות, אנונימיות וסטטיות

חלק מסדרת הרצאות בנושא "תכנות מונחה עצמים בסביבת ג'אווה", והפעם: מחלקות פנימיות.

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

  • Be the first to like this

ג'אווה - תכנות מונחה עצמים - מחלקות פנימיות - רגילות, אנונימיות וסטטיות

  1. 1. ‫פנימיות‬ ‫מחלקות‬–Inner Classes‫האובייקט‬ ‫של‬ ‫ולמתודות‬ ‫למשתנים‬ ‫גישה‬ ‫שלה‬ ‫למופע‬ ‫יש‬ ‫כן‬ ‫ועל‬ ‫אחרת‬ ‫מחלקה‬ ‫בתוך‬ ‫שמוגדרת‬ ‫מחלקה‬ ‫היא‬ ‫פנימית‬ ‫מחלקה‬‫הגישה‬ ‫מציין‬ ‫בעלי‬ ‫לאלו‬ ‫גם‬ ,‫נוצר‬ ‫הוא‬ ‫שבנוכחותו‬private‫זו‬ ‫מחלקה‬ ‫תשמש‬ ‫לרוב‬ .‫בה‬ ‫החיצונית‬ ‫למחלקה‬ ‫עזר‬ ‫כמחלקת‬:‫הבא‬ ‫באופן‬ ‫תוגדר‬ ‫פנימית‬ ‫מחלקה‬ .‫מוגדרת‬ ‫היא‬public class OuterClass {class InnerClass {}}‫אותה‬ ‫מגדירים‬ ‫כן‬ ‫אם‬ ‫אלא‬ ,‫המכילה‬ ‫מהמחלקה‬ ‫אובייקט‬ ‫של‬ ‫נוכחות‬ ‫אותה‬ ‫מבלי‬ ‫פנימית‬ ‫מחלקה‬ ‫של‬ ‫מופע‬ ‫ליצור‬ ‫ניתן‬ ‫לא‬.‫מתאפשר‬ ‫הדבר‬ ‫ואז‬ ‫כסטטית‬‫ני‬:‫דרכים‬ ‫בשלוש‬ ‫זו‬ ‫נוכחות‬ ‫להשיג‬ ‫תן‬‫הראשונה‬‫האובייקט‬ ‫הוא‬ ‫מי‬ ‫ברור‬ ‫(ואז‬ ‫החיצונית‬ ‫המחלקה‬ ‫של‬ ‫בקונסטרקטור‬ ‫הפנימית‬ ‫מהמחלקה‬ ‫אובייקט‬ ‫יצירת‬ ‫ע"י‬ ,:‫הקונסטרקטור‬ ‫של‬ ‫ההכרה‬ ‫בטווח‬ ‫גישה‬ ‫לנו‬ ‫תהיה‬ ‫זה‬ ‫לאובייקט‬ ,)‫החיצוני‬public class OuterClass {public OuterClass() {InnerClass innerObject1=new InnerClass();}class InnerClass {}}‫השניה‬‫האובייקט‬ ‫מיהו‬ ‫ברור‬ ‫אז‬ ‫(וגם‬ ‫החיצוני‬ ‫האובייקט‬ ‫של‬ ‫מופע‬ ‫מתודת‬ ‫בתוך‬ ‫הפנימית‬ ‫מהמחלקה‬ ‫אובייקט‬ ‫יצירת‬ ‫ע"י‬ ,:‫פנימית‬ ‫מחלקה‬ ‫אובייקט‬ ‫לאותו‬ ‫ברפרנס‬ ‫ולהחזיק‬ ‫להמשיך‬ ‫ניתן‬ ‫גם‬ ‫אז‬ ,)‫החיצוני‬public class OuterClass {public InnerClass getInnerObj() {return new InnerClass();}class InnerClass {}}OuterClass outerObject=new OuterClass(); //InOuterClass.InnerClass innerObject2=outerObject.getInnerObj(); //Main...‫השלישית‬‫שימוש‬ ‫ע"י‬ ,‫החיצונית‬ ‫מהמחלקה‬ ‫אובייקט‬ ‫אותו‬ ‫מיהו‬ ‫ברור‬ ‫כמובן‬ ‫כאן‬ ‫(גם‬ ‫החיצונית‬ ‫מהמחלקה‬ ‫לאובייקט‬ ‫ברפרנס‬:)‫נוצר‬ ‫הוא‬ ‫בנוכחותו‬OuterClass.InnerClass innerObject3=outerObject.new InnerClass(); //In Main...OROuterClass.InnerClass innerObject4=new OuterClass().new InnerClass(); //In Main...
  2. 2. ‫החיצונית‬ ‫מהמחלקה‬ ‫לאובייקט‬ ‫ברפרנס‬ ‫טמון‬ ‫החיצונית‬ ‫המחלקה‬ ‫של‬ ‫זה‬ ‫לבין‬ ‫הפנימית‬ ‫המחלקה‬ ‫של‬ ‫האובייקט‬ ‫בין‬ ‫הקשר‬.‫הקלעים‬ ‫מאחורי‬ ‫נסתרת‬ ‫בצורה‬ ‫מחזיק‬ ‫הפנימית‬ ‫המחלקה‬ ‫של‬ ‫שהאובייקט‬‫לאפש‬ ,‫לדוגמה‬ ‫ובכך‬ ‫הקיימים‬ ‫הגישה‬ ‫מצייני‬ ‫בכל‬ ‫להשתמש‬ ‫ניתן‬ ,‫פנימיות‬ ‫מחלקות‬ ‫עבור‬‫מציין‬ ‫ע"י‬ ‫המחלקה‬ ‫של‬ ‫הסתרה‬ ‫ר‬‫הגישה‬private,‫מכיר‬ ‫שהוא‬ ‫המחלקה‬ ‫של‬ ‫ההגדרה‬ ‫בטווח‬ ‫המתחולל‬ ‫על‬ ‫כלל‬ ‫ידע‬ ‫לא‬ ‫החיצונית‬ ‫במחלקה‬ ‫שהמשתמש‬ ‫כך‬ ,.‫כלל‬ ‫עליה‬ ‫ידע‬ ‫בה‬ ‫שהמשתמש‬ ‫מבלי‬ ‫החיצונית‬ ‫של‬ ‫פעולתה‬ ‫על‬ ‫להקל‬ ‫תבוא‬ ‫ולרוב‬ ‫מוסתרת‬ ‫תהיה‬ ‫הפנימית‬ ‫המחלקה‬ ‫פעולת‬‫במתו‬ ‫פנימית‬ ‫מחלקה‬ ‫להגדיר‬ ‫ניתן‬‫המתודה‬ ‫לאותה‬ ‫יהיה‬ ‫שלה‬ ‫ההכרה‬ ‫וטווח‬ ‫בלבד‬ ‫המתודה‬ ‫של‬ ‫לפעולתה‬ ‫שתעזור‬ ‫כזו‬ ,‫דה‬‫כקבוע‬ ‫הוגדר‬ ‫הוא‬ ‫אם‬ ‫רק‬ ‫המתודה‬ ‫של‬ ‫למשתנה‬ ‫גישה‬ ‫תתאפשר‬ ‫במתודה‬ ‫פנימית‬ ‫למחלקה‬ ,‫זאת‬ ‫עם‬ ,‫בלבד‬ ‫הוגדרה‬ ‫היא‬ ‫בה‬final‫המש‬ ‫של‬ ‫עותק‬ ‫נוצר‬ ‫המתודה‬ ‫בתוך‬ ‫הפנימית‬ ‫המחלקה‬ ‫של‬ ‫היצירה‬ ‫ובעת‬ ‫היות‬ ,‫חלה‬ ‫זו‬ ‫דרישה‬ .‫עבור‬ ‫המקומיים‬ ‫תנים‬‫בין‬ ‫קשר‬ ‫יהיה‬ ‫לא‬ ‫ואז‬ ‫המתודה‬ ‫פעולת‬ ‫במהלך‬ ‫להשתנות‬ ‫מהם‬ ‫מניעה‬ ‫אין‬ ,‫כסופיים‬ ‫יוגדרו‬ ‫לא‬ ‫אלו‬ ‫אם‬ .‫הפנימית‬ ‫המחלקה‬‫של‬ ‫לאופיים‬ ‫הודות‬ !‫זהים‬ ‫להיות‬ ‫אמורים‬ ‫שהם‬ ‫והרי‬ ,‫למתודה‬ ‫הפנימית‬ ‫המחלקה‬ ‫של‬ ‫למשתנה‬ ‫המתודה‬ ‫של‬ ‫המשתנה‬‫פני‬ ‫ממחלקה‬ ‫שנוצר‬ ‫אובייקט‬ ,‫סופיים‬ ‫משתנים‬‫מטווח‬ ‫ביציאה‬ ‫גם‬ ‫הסופי‬ ‫המקומי‬ ‫המשתנה‬ ‫את‬ ‫יכיר‬ ‫זו‬ ‫מית‬‫של‬ ‫ההכרה‬!‫המתודה‬public class OuterClass {public void defineMethodInnerClass() {int var=0;final int finalVar=0;class methodInnerClass {public methodInnerClass() {//System.out.println(var); *ERROR*System.out.println(finalVar); //*OK*}}}}‫השמורה‬ ‫במילה‬ ‫להשתמש‬ ‫ניתן‬ ‫הפנימית‬ ‫המחלקה‬ ‫של‬ ‫מתודות‬ ‫בתוך‬this‫או‬ ,‫שנוצר‬ ‫הפנימי‬ ‫לאובייקט‬ ‫רפרנס‬ ‫לקבל‬ ‫ע"מ‬‫ואז‬ ‫נקודה‬ ,‫החיצונית‬ ‫המחלקה‬ ‫בשם‬this‫רפרנס‬ ‫לקבל‬ ‫ע"מ‬:‫נוצר‬ ‫הפנימית‬ ‫של‬ ‫האובייקט‬ ‫בנוכחותו‬ ‫החיצוני‬ ‫לאובייקט‬public class OuterClass {private int sum=0;public void setSum(int sum) {this.sum=sum;}class InnerClass {private int sum=0;public void incInnerSum() {this.sum++;}public void incOuterSum() {OuterClass.this.sum++;}}}
  3. 3. ,‫בשמה‬ ‫הפנימית‬ ‫למחלקה‬ ‫לקרוא‬ ‫מספיק‬ ,‫העוטפת‬ ‫המחלקה‬ ‫של‬ ‫ההכרה‬ ‫בטווח‬ ‫נמצאים‬ ‫אנו‬ ‫כאשר‬ ,‫המחלקה‬ ‫שם‬ ‫מבחינת‬‫ונקודה‬ ‫שמה‬ ‫לפני‬ ‫החיצונית‬ ‫המחלקה‬ ‫שם‬ ‫בצירוף‬ ‫הפנימית‬ ‫למחלקה‬ ‫לקרוא‬ ‫יש‬ ,‫זה‬ ‫הכרה‬ ‫לטווח‬ ‫מחוץ‬ ‫כאשר‬ ‫אך‬‫מפרידה‬(Full Qualified Name.).‫הפניה‬ ‫אופן‬ ‫את‬ ‫לקצר‬ ‫דרך‬ ‫יש‬ ,)‫בהמשך‬ ‫(נסביר‬ ‫סטטיות‬ ‫פנימיות‬ ‫במחלקות‬ ‫מדובר‬ ‫כאשר‬‫שם‬ ‫במבנה‬ ‫קטן‬ ‫שינוי‬ ‫מלבד‬ ‫הרגילות‬ ‫המחלקות‬ ‫קבצי‬ ‫לבין‬ ‫הפנימיות‬ ‫המחלקות‬ ‫קבצי‬ ‫בין‬ ‫הבדל‬ ‫אין‬ ,‫המחלקה‬ ‫קובץ‬ ‫מבחינת‬‫ה‬ ‫ומבחינת‬ ‫היות‬ ‫זאת‬ ,‫הקובץ‬-JVM‫מ‬ ‫בין‬ ‫הבדל‬ ‫אין‬ ,:‫חיצונית‬ ‫מחלקה‬ ‫לבין‬ ‫פנימית‬ ‫חלקה‬‫החיצונית‬ ‫המחלקה‬ ‫קובץ‬OuterClass:‫כך‬ ‫ייראה‬OuterClass.class‫הפנימית‬ ‫המחלקה‬ ‫קובץ‬InnerClass:‫כך‬ ‫ייראה‬ ‫בתוכה‬ ‫שמוגדרת‬OuterClass$InnerClass.class.‫שיקוף‬ ‫נבצע‬ ‫כאשר‬ ‫זה‬ ‫בעניין‬ ‫נעמיק‬-Reflection-.‫בהמשך‬ ‫לפרטים‬ ‫שיוסבר‬ ‫נושא‬‫מחלקות‬‫אנונימיות‬ ‫פנימיות‬–Anonymous Inner Classes‫ולא‬ ,‫ויחיד‬ ‫אחד‬ ‫אובייקט‬ ‫ממנה‬ ‫נוצר‬ ‫שלרוב‬ ,)‫(קונסטרקטור‬ ‫בונה‬ ‫פונקציה‬ ‫וחסרת‬ ‫שם‬ ‫חסרת‬ ‫להיות‬ ‫יכולה‬ ‫פנימית‬ ‫מחלקה‬‫מוגדרת‬ "‫מזדמנת‬ ‫"עבודה‬ ‫מבצעת‬ ‫שלרוב‬ ‫מסוים‬ ‫במובן‬ "‫"מנוונת‬ ‫מחלקה‬ ‫זוהי‬ .‫שלה‬ ‫נוספים‬ ‫מופעים‬ ‫ידני‬ ‫באופן‬ ‫לייצר‬ ‫ניתן‬.‫מראש‬‫להשתמש‬ ‫נבחר‬ ‫בהם‬ ‫המקרים‬ ‫אותם‬ ‫בכל‬ ‫רגילה‬ ‫פנימית‬ ‫במחלקה‬ ‫להשתמש‬ ‫בעיה‬ ‫טכנית‬ ‫מבחינה‬ ‫שאין‬ ,‫ראשית‬ ‫נציין‬‫"כדת‬ ‫מחלקה‬ ‫להגדיר‬ ‫מיותר‬ ‫זה‬ ‫יהיה‬ ,‫זאת‬ ‫עם‬ ,‫לרוב‬ .‫אחר‬ ‫דבר‬ ‫מכל‬ ‫יותר‬ ‫אסטטי‬ ‫עניין‬ ‫זהו‬ ,‫אנונימית‬ ‫פנימית‬ ‫במחלקה‬‫מחלקה‬ ‫דורשת‬ ‫שאינה‬ ‫פעמית‬ ‫חד‬ ‫משימה‬ ‫ביצוע‬ ‫לצורך‬ "‫וכדין‬.‫שכזו‬:‫נרשום‬ ‫אנונימית‬ ‫פנימית‬ ‫מחלקה‬ ‫אובייקט‬ ‫אותו‬ ‫את‬ ‫לייצר‬ ‫ע"מ‬new Type(/*ARGUMENTS*/) {/*Methods and Variables that extend/implement class/interface Type*/};‫מסוג‬ ‫במשתנה‬ ‫נציב‬ ‫אותו‬ ‫אנונימית‬ ‫מחלקה‬ ‫מאותה‬ ‫שנוצר‬ ‫חדש‬ ‫לאובייקט‬ ‫רפרנס‬ ‫חזרה‬ ‫ונקבל‬Type.‫המשתנה‬ ‫דרך‬‫החד‬ ‫החדש‬ ‫בטיפוס‬ ‫שהגדרנו‬ ‫למשתנים/מתודות‬ ‫לפנות‬ ‫נוכל‬ ‫לא‬ ‫אנחנו‬ ,‫הזה‬-‫מכיר‬ ‫לא‬ ‫הוא‬ ‫שהרי‬ ‫כמובן‬ ‫פעמי‬‫אותנו‬ ‫ששימש‬ ‫מהטיפוס‬ ‫אחת‬ ‫מתודה‬ ‫לפחות‬ ,‫חדש‬ ‫טיפוס‬ ‫באותו‬ ‫להשתמש‬ ‫שנוכל‬ ‫ע"מ‬ ,‫ולכן‬ ,‫אותם‬ ‫לראות‬ ‫יכול‬ ‫ולא‬ ‫אותם‬‫המתודות‬ ‫בכל‬ ‫להשתמש‬ ‫כבר‬ ‫ניתן‬ ‫זו‬ ‫מתודה‬ ‫דרך‬ .‫להידרס‬ ‫צריכה‬ ‫כבסיס‬.‫שהגדרנו‬ ‫והמשתנים‬ ‫החדשות‬Type‫ו‬ ,)‫ארגומנטים‬ ‫שולחים‬ ‫לא‬ ‫אז‬ ‫(אבל‬ ‫מיישמת‬ ‫האנונימית‬ ‫הפנימית‬ ‫שהמחלקה‬ ‫אינטרפייס‬ ‫מטיפוס‬ ‫להיות‬ ‫יכול‬-Type‫גם‬.‫מרחיבה‬ ‫האנונימית‬ ‫הפנימית‬ ‫שהמחלקה‬ ‫מחלקה‬ ‫להיות‬ ‫יכול‬
  4. 4. .‫אנונימית‬ ‫פנימית‬ ‫מחלקה‬ ‫של‬ ‫למימוש‬ ‫דוגמה‬ ‫נראה‬‫היררכיית‬ ‫את‬ ‫נבחן‬:‫המחלקות‬ ‫והגדרת‬public class Human {public void cout() {System.out.println("Im a Human!");}}public class Person extends Human {public void use() {Human human1=new Human();Human human2=new Human(/*No Arguments - Default Constructor @ class Human*/) {/*Variables that extend class Human*/int unique=10;/*Methods that extend class Human*/public void cout() {super.cout();System.out.println("But not just a Human...");cantAccessDirectly(unique);}public void cantAccessDirectly(int u) {System.out.println("Im a special kind of Human!");System.out.println("My Unique ID is: "+u);}};System.out.println("******************************");System.out.println("cout of human1:");human1.cout();System.out.println("******************************");System.out.println("cout of human2:");human2.cout();System.out.println("******************************");}}
  5. 5. ‫ב‬ ‫ניצור‬-main‫מטיפוס‬ ‫אובייקט‬Person‫את‬ ‫עליו‬ ‫נפעיל‬ ,use():‫הבא‬ ‫הפלט‬ ‫את‬ ‫ונקבל‬******************************cout of human1:Im a Human!******************************cout of human2:Im a Human!But not just a Human...Im a special kind of Human!My Unique ID is: 10******************************‫האובייקט‬ ‫יצירת‬ ‫בין‬ ‫להבדלים‬ ‫לב‬ ‫נשים‬human1‫ו‬-human2‫מהמחלקה‬ ‫נוצר‬ ‫הראשון‬ ,Human‫פנימית‬ ‫ממחלקה‬ ‫והשני‬‫המחלקה‬ ‫את‬ ‫רגעי‬ ‫באופן‬ ‫מרחיבה‬ ‫אשר‬ ,‫אנונימית‬Human.‫המתודה‬ ‫את‬ ‫לדרוס‬ ‫דאגנו‬ ‫האנונימית‬ ‫הפנימית‬ ‫במחלקה‬cout()‫של‬ ‫הפעלה‬ ‫לאפשר‬ ‫ע"מ‬ ‫זאת‬ ,‫מהמחלקה‬ ‫מוכרת‬ ‫מתודה‬Human‫את‬ ‫להפעיל‬ ‫נרצה‬ ‫שכאשר‬ ‫כך‬ ,cout()‫דרך‬human1‫את‬ ‫נפעיל‬ ,cout()‫של‬Human‫נפעיל‬ ‫כאשר‬ ‫אך‬ ,‫הסטנדרטית‬‫את‬cout()‫של‬human2.‫האנונימית‬ ‫הפנימית‬ ‫במחלקה‬ ‫שנדרסה‬ ‫זו‬ ‫את‬ ‫נפעיל‬ ,‫המתודה‬ ‫דרך‬ ,‫זה‬ ‫באופן‬cout()‫שהוגדרו‬ ‫נוספות‬ ‫מתודות‬ ‫להפעיל‬ ‫נוכל‬ ,‫הדרוסה‬‫לדוגמה‬ ,‫האנונימית‬ ‫הפנימית‬ ‫במחלקה‬cantAccessDirectly()‫המחלקה‬ ‫מופע‬ ‫דרך‬ ‫ישיר‬ ‫באופן‬ ‫אליה‬ ‫לגשת‬ ‫נוכל‬ ‫שלא‬ ‫מתודה‬ ,‫היא‬ ‫כן‬ ‫שכשמה‬ ,human2‫רק‬ ‫אלא‬ ,‫ובראשן‬ ‫במחלקה‬ ‫האחרות‬ ‫המתודות‬ ‫דרך‬cout().‫ע‬ ‫שאנו‬ ‫האובייקט‬ ‫בהם‬ ‫במצבים‬ ‫תהיה‬ ‫אנונימית‬ ‫פנימית‬ ‫במחלקה‬ ‫שימוש‬ ‫לבצע‬ ‫ההעדפה‬ ,‫כאמור‬‫הוא‬ ‫שימוש‬ ‫בו‬ ‫ושים‬‫"חד‬ ‫אובייקט‬-‫אין‬ ‫אך‬ ,‫התכנית‬ ‫כל‬ ‫משך‬ ‫שרץ‬ ‫כזה‬ ‫אפילו‬ ‫או‬ ,‫יותר‬ ‫בו‬ ‫צריך‬ ‫ולא‬ ‫מסוימת‬ ‫עבודה‬ ‫שעושה‬ ‫כזה‬ ‫אובייקט‬ ,"‫פעמי‬.‫כזה‬ ‫אחד‬ ‫מאובייקט‬ ‫ביותר‬ ‫להחזיק‬ ‫לוגי‬ ‫או‬ ‫ממשי‬ ‫צורך‬‫חוטים‬ ‫בשני‬ ‫להחזיק‬ ‫וברצוננו‬ ‫מחשב‬ ‫משחק‬ ‫המהווה‬ ‫תכנית‬ ‫כותבים‬ ‫אנו‬ ‫בו‬ ‫מקרה‬ ‫לדוגמה‬ ‫ניקח‬-‫ת‬( ‫הליכונים‬threads‫הרצים‬ )‫המחשב‬ ‫של‬ ‫המהלכים‬ ‫חישובי‬ ‫של‬ ‫הלוגיקה‬ ‫להרצת‬ ‫אחראי‬ ‫והשני‬ ‫הגרפי‬ ‫המשתמש‬ ‫ממשק‬ ‫את‬ ‫מריץ‬ ,‫האחד‬ :‫במקביל‬.)‫המשתמש‬ ‫של‬ ‫התור‬ ‫בזמן‬ ‫משלו‬ ‫מהלכים‬ ‫יחשב‬ ‫(המחשב‬‫ג‬ ,‫ולכן‬ ‫העבודה‬ ‫אותה‬ ‫את‬ ‫שיעשה‬ ‫תהליכון‬ ‫בעוד‬ ‫צורך‬ ‫ואין‬ ,‫ספציפי‬ ‫תהליכון‬ ‫זהו‬ ,"‫"חושב‬ ‫שהמחשב‬ ‫בזמן‬‫אמתי‬ ‫צורך‬ ‫אין‬ ‫ם‬‫מ‬ ‫שתירש‬ ‫מחלקה‬ ‫של‬ ‫יצירה‬ ‫על‬ ‫לוותר‬ ‫ניתן‬ ,‫כאלו‬ ‫במקרים‬ .‫התהליכון‬ ‫את‬ ‫שתייצג‬ ‫במחלקה‬-thread‫רק‬ ‫בה‬ ‫שנשתמש‬ ‫כדי‬‫עוד‬ ‫אין‬ ,‫סיימנו‬ ‫ובזאת‬ ‫לתהליכון‬ ‫נשלח‬ ‫שאותו‬ ‫פעמי‬ ‫חד‬ ‫אובייקט‬ ‫ליצור‬ ‫לנו‬ ‫מספיק‬ ,‫זה‬ ‫במקום‬ ,‫ההרצה‬ ‫בתחילת‬ ‫אחת‬ ‫פעם‬‫התכני‬ ‫סוף‬ ‫עד‬ ‫כאלו‬ ‫באובייקטים‬ ‫צורך‬...‫ת‬‫ל‬ ‫רוצים‬ ‫אנו‬ ‫בהם‬ ‫למקרים‬ ‫אנונימית‬ ‫פנימית‬ ‫במחלקה‬ ‫הצורך‬ ‫את‬ ‫לשייך‬ ‫ניתן‬ ,‫לסיכום‬‫ייצר‬‫יותר‬ ,‫ממחלקה‬ ‫אובייקט‬.‫אובייקטים‬ ‫לייצר‬ ‫ניתן‬ ‫ממנה‬ ‫מחלקה‬ ‫מאשר‬
  6. 6. ‫סטטיות‬ ‫פנימיות‬ ‫מחלקות‬–Static Nested Classes.)‫רגילה‬ ‫למחלקה‬ ‫(בניגוד‬ ‫כסטטית‬ ‫להגדרה‬ ‫ניתנת‬ ‫פנימית‬ ‫מחלקה‬‫זו‬ ‫מחלקה‬ ‫מסוג‬ ‫אובייקט‬ ‫כלומר‬ ,‫המכילה‬ ‫מהמחלקה‬ ‫אובייקט‬ ‫של‬ ‫נוכחות‬ ‫ללא‬ ‫גם‬ ‫אובייקט‬ ‫יווצר‬ ‫סטטית‬ ‫פנימית‬ ‫ממחלקה‬.‫כזה‬ ‫לאובייקט‬ ‫רפרנס‬ ‫יכיל‬ ‫ולא‬ ‫החיצונית‬ ‫מהמחלקה‬ ‫לאובייקט‬ ‫קשור‬ ‫אינו‬‫המחלקה‬ ‫של‬ ‫אובייקט‬ ‫(לדוגמה‬ ‫פנימית‬ ‫מחלקה‬ ‫של‬ ‫אובייקט‬ ‫לייצר‬ ‫נרצה‬ ‫באם‬StaticNestedClass‫בהמשך‬‫מתודה‬ ‫דרך‬ )‫במתודת‬ ‫לדוגמת‬ ,‫אחרת‬ ‫מחלקה‬ ‫של‬ ‫סטטית‬main:‫הבא‬ ‫באופן‬ ,‫כסטטית‬ ‫מוגדרת‬ ‫להיות‬ ‫הפנימית‬ ‫המחלקה‬ ‫על‬ ,public class OuterClass {static class StaticNestedClass {public void staticNestedMethod() {}}}‫ב‬ ‫האובייקט‬ ‫יצירת‬-main:‫כך‬ ‫תתבצע‬OuterClass.StaticNestedClass staticNestedObject1=new OuterClass.StaticNestedClass();staticNestedObject1.staticNestedMethod();‫ב‬ ‫משימוש‬ ‫להימנע‬ ‫ניתן‬ ,‫כאמור‬-Full Qualified Name‫של‬ ‫ביצוע‬ ‫ע"י‬ ,import‫המחלקה‬ ‫לקובץ‬ ‫הסטטית‬ ‫המחלקה‬ ‫של‬‫ה‬ ‫מתודת‬ ‫נמצאת‬ ‫(בה‬ ‫המריצה‬-main.).‫הדפולטיבית‬ ‫מהחבילה‬ ‫שונה‬ ‫לחבילה‬ ‫להשתייך‬ ‫צריכות‬ ‫המחלקות‬ ,‫סטטית‬ ‫מחלקה‬ ‫של‬ ‫ייבוא‬ ‫ביצוע‬ ‫שלשם‬ ‫לציין‬ ‫יש‬:‫כך‬ ‫ייבוא‬ ‫ונבצע‬ ‫לחבילות‬ ‫הקבצים‬ ‫את‬ ‫נשייך‬ ,‫כן‬ ‫על‬package somepackage;import staticimport.OuterClass.StaticNestedClass;,‫הרגע‬ ‫ומאותו‬‫הפ‬ ‫למחלקה‬ ‫לפנות‬ ‫יהיה‬ ‫ניתן‬:‫ההיררכיה‬ ‫במעלה‬ ‫הייתה‬ ‫כאילו‬ ‫הסטטית‬ ‫נימית‬StaticNestedClass staticNestedObject2=new StaticNestedClass();staticNestedObject2.staticNestedMethod();‫שנייצר‬ ‫אובייקט‬ ‫בהם‬ ‫במקרים‬ ‫בה‬ ‫לשימוש‬ ‫יתרון‬ ‫יש‬ .‫ייחודיים‬ ‫די‬ ‫מקרים‬ ‫הם‬ ,‫סטטית‬ ‫פנימית‬ ‫במחלקה‬ ‫נשתמש‬ ‫בהם‬ ‫המקרים‬‫ממנה‬‫כ‬ ‫שהוגדר‬ ‫סטטי‬ ‫לשדה‬ ‫לגשת‬ ‫צריך‬-private.‫העוטפת‬ ‫במחלקה‬‫בטווח‬ ‫לכלול‬ ‫צורך‬ ‫לנו‬ ‫יש‬ ‫האם‬ ‫עצמנו‬ ‫את‬ ‫נשאל‬ ,‫לא‬ ‫או‬ ‫סטטית‬ ‫שלנו‬ ‫הפנימית‬ ‫המחלקה‬ ‫תהיה‬ ‫באם‬ ‫בהחלטה‬ ‫מקדים‬ ‫כשיקול‬‫ל‬ ‫נוכל‬ ,‫כן‬ ‫באם‬ ,)‫לה‬ ‫(החיצונית‬ ‫העוטפת‬ ‫למחלקה‬ ‫השייכים‬ ‫סטטיים‬ ‫שאינם‬ ‫מתודות‬ ‫או‬ ‫משתנים‬ ‫זו‬ ‫מחלקה‬ ‫של‬ ‫ההכרה‬‫הבין‬‫כ‬ ‫ולהגדירה‬ ‫לנסות‬ ‫שלא‬‫סטטית‬.‫קומפילציה‬ ‫שגיאת‬ ‫נקבל‬ ‫שהרי‬‫לזכור‬ ‫יש‬–‫היא‬ ,‫לוגית‬ ‫מבחינה‬ ‫היררכיה‬ ‫בראש‬ ‫שיושבת‬ ‫עצמאית‬ ‫למחלקה‬ ‫נחשבת‬ ‫סטטית‬ ‫מחלקה‬ ,‫היררכית‬ ‫מבחינה‬.‫ונוחיות‬ ‫סדר‬ ‫לשם‬ ‫רק‬ ‫אחרת‬ ‫מחלקה‬ ‫של‬ ‫הכרה‬ ‫בתחום‬ ‫ממוקמת‬

×