עבור לתוכן

JAVA - שאלה על התייחסות לתכונות של עצמים במחלקות

Featured Replies

פורסם

עשיתי מחלקה X שהיא טיפוס של עצמים שיווצרו במחלקות אחרות.

במחלקה Y יצרתי עצמים מטיפוס X.

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

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

אני רוצה בקיצור גישה לתכונה של עצם בלבד, ולא להגדיר במחלקה X פונקציה שמקבלת ערך מסויים ומכניסה אותו לתכונה של העצם.. כי אני מעוניינת לשים ערך בתכונה במחלקה Y עצמה.

אפשר לעשות את זה? אם כן איך?

פורסם

הכל את יכולה לעשות. לדוגמה, נניח שאת מגדירה מחלקה A שמכילה איבר בשם b מטיפוס B, שמכיל איבר בשם c.

אם b ו-c מוגדרים כפומביים (public) אז את יכולה לגשת אליהם ישירות:

a.b.c

אבל לא נהוג להגדיר איברים במחלקה כפומביים.

אם, לדוגמה, b אינו מוגדר כפומבי, אז יש שתי אופציות - או להגדיר ב-A פונקציית גישה אליו (פונקציה שתחזיר את b), או להגדיר ב-A פונקציה שתתן גישה ישירה ל-c (כלומר הפונקציה תחזיר את b.c).

יש? אם לא, אז תסבירי קצת יותר טוב מה את רוצה לעשות (אולי עם דוגמת קוד קצרה).

פורסם
  • מחבר

לא הבנתי לגמרי...

אני אסביר את הבעיה שלי עם קוד:

עשיתי מחלקה בשם Days

הגדרתי במחלקה אחרת מערך שהאיברים בו מטיפוס Days

והשורה הבאה היא בעייתית:

array.Day = (String) Acombo.getSelectedItem();

הגדרתי את התכונה/איבר Day כpublic במחלקת Days...

הבעיה שלי היא שהייתי בטוחה שאי אפשר לגשת לתכונה עם סימון נק', כמו X.day, במחלקה שהיא אחרת מהמחלקה Days, וחשבתי שכששמים נק' אחרי המשתנה, במחלקה שהיא אחרת מDays מדובר בפונקציה אחר כך ולא בשום תכונה...

אני טועה לגבי זה או שזה נכון?

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

ותודה :)

פורסם

אפשר להתייחס לשדות ("תכונות") public ממחלקות אחרות, בשביל זה קיים public. עם זאת, לא בריא להצהיר על שדות כ-public. עדיף שתגדירי את השדה כ-private ותוסיפי accessors - פונקציות getDay() ו-setDay(). ראי דוגמא כאן:

http://en.wikipedia.org/wiki/Field_encapsulation

פורסם
  • מחבר

השתמשתי הפעם בפונקציות

כשאני מישתמשת בפונקציה של get שרק מחזירה ערך (שדה/תכונה), אני לא יכולה בעצם לעשות השמה של מה שהוחזר מהפונקציה לערך אחר?

למשל:

A.getDay= 2;

פורסם
  • מחבר

תודה הסתדרתי :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים