עבור לתוכן

בנאים ב Java -

Featured Replies

פורסם

ערב טוב לכולם,

אני כתבתי את המחלקה הנ"ל (למטה) ,

איזו פקודה ב main יכולה להדפיס את ערכי הבנאי השני ?

יש לי ב main יש את הפקודה :

Product d1 = new Product (10,10,10);

ניסיתי כל מיני קומבינציות עם d1. אבל לא הלך לי והוא המשיך להדפיס 10 10 10

הקוד הוא :



public class Product
{

private long _catalogNo ;
private double _price ;
private int _numOfProducts;

public Product (long catalogNo,double price,int numOfProducts)
{

_catalogNo=catalogNo;
_price=price;
_numOfProducts=numOfProducts;

}

public Product (Product one)
{
one._catalogNo=1234567890;
one._price=5;
one._numOfProducts=100;


_catalogNo=one._catalogNo;
_price=one._price;
_numOfProducts=one._numOfProducts;

}

פורסם

מה זאת אומרת "ערכי הבנאי השני"?

הבנאי השני הוא בנאי שמקבל Product כפרמטר. כלומר בשביל להשתמש בו צריך שכבר יהיה לך אובייקט קיים מסוג Product.

פורסם

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

פורסם
  • מחבר

אני אנסה לנסח את השאלה מחדש ,

ב main יש כבר : Product d1=new Product(10,10,10);P

(ה P עבור יישור השורה )

עכשיו אם אני רוצה לבצע פקודה שתכניס את הערכים (1234567890,5,100)

איך אני עושה זאת ?

פורסם

תוסיף SETTERS שיודעים לעדכן את ערכו של האובייקט.

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

מה שאתה צריך לעשות זה למחוק את 3 השורות הראשונות בבנאי "השני" שלך ולהוסיף פונקציות set שיודעות לעדכן את השדות.

פורסם
  • מחבר

תודה הבנתי ,

אני מבין שאין דרך אחרת לעשות זאת תו"כ שימוש ב Product one

נגיד d1.Product one ();P

פורסם

אני רואה שיש לך בעיה עם דברים מאוד בסיסיים של OOP.כשאתה כותב ;Product one אתה בעצם מצהיר על משתנה מטיפוס Product שקוראים לו one.

אחרי זה אתה יכול לאתחל אותו עם new ( גם בנאי העתקה,הבנאי השני שלך, מאתחל אותו).

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

בהצלחה :xyxthumbs:

פורסם
  • מחבר

אני פשוט לא מבין משהו ..

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

(למעשה , זה מה שאני מתבקש לעשות ..)

פורסם

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

פורסם

ממליץ לך לקבוע קבועים נוספים למחלקה ולהגדיר אותם כך:


private static final long DEFAULT_CATALOG_NUMBER = 10;
private static final double DEFAULT_PRICE = 10;
private static final int DEFAULT_NUM_OF_PRODUCTS = 10;

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

בבנאי הריק (בנאי שלא מקבל ארגומנטים) תכניס את המשתנה [DEFAULT_[VALUE וככה יהיה לך יותר קל ליישם את המחלקה ולבצע שינויים אח"כ במידה ותרצה.

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

ארכיון

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

דיונים חדשים