View Full Version : سوال: تفاوت خروجی
yegane8
شنبه 06 خرداد 1391, 14:18 عصر
سلام
فرض کنید کلاس item یه کلاس پدر باشه
تفاوت خروجی این در خط چیه ؟
ُSystem.out.println(item);
System.out.println(item.toString());
ربطی بهoverriding داره؟
spiderman200700
شنبه 06 خرداد 1391, 14:38 عصر
بله میتونه به overriding ربط داشته باشه. شما توی همه ی کلاس هایی که مینویسی متونی متد toString رو Override کنی. و هر جوری که دلت میخواد بنویسیتش.
حالا اگه item یکی از کلاس های کتابخانه ی جاوا هست خروجیه این کد بستگی به این داره که item چه نوع کلاسی باشه. یعنی توی هر کلاس ممکنه متد toString به شکل متفاوتی تعریف شده باشه. پس خروجی ها ممکنه متفاوت باشه.
مثلا اگه item از نوع String باشه، خروجی ها ی این کدها فرقی ندارن.
اینم بگم که متد toString در کلاس Object تعریف شده. و چون همه ی کلاس ها جاوا از این کلاس ارث بری می کنن، متد toString در تمامی کلاس ها تعریف شده هست. حالا بعضی کلاس ها اومد این متد رو Override کردن.
yegane8
شنبه 06 خرداد 1391, 14:49 عصر
بله میتونه به overriding ربط داشته باشه. شما توی همه ی کلاس هایی که مینویسی متونی متد toString رو Override کنی. و هر جوری که دلت میخواد بنویسیتش.
حالا اگه item یکی از کلاس های کتابخانه ی جاوا هست خروجیه این کد بستگی به این داره که item چه نوع کلاسی باشه. یعنی توی هر کلاس ممکنه متد toString به شکل متفاوتی تعریف شده باشه. پس خروجی ها ممکنه متفاوت باشه.
مثلا اگه item از نوع String باشه، خروجی ها ی این کدها فرقی ندارن.
اینم بگم که متد toString در کلاس Object تعریف شده. و چون همه ی کلاس ها جاوا از این کلاس ارث بری می کنن، متد toString در تمامی کلاس ها تعریف شده هست. حالا بعضی کلاس ها اومد این متد رو Override کردن.
item یه کلاسی هست که خروجی از نوع یه object دیگه هست و متد toString هم در کلاس item تعریف نشده
حالا خروجی های کدهای بالا چه فرقی میتونن باهم کنن؟
spiderman200700
شنبه 06 خرداد 1391, 20:22 عصر
پس در اینصورت. خروجی ها نباید هیچ فرقی با هم داشته باشن.
چون در خط زیر هم به صورت خودکار متد toString فراخوانی میشه.
System.out.println(item);
phoenix87
یک شنبه 07 خرداد 1391, 16:05 عصر
این دو دستور هیچ فرقی با هم ندارند مگر اینکه خودت to string رو overridingکنی.
mortezaadi
چهارشنبه 10 خرداد 1391, 00:18 صبح
سلام
فرض کنید کلاس item یه کلاس پدر باشه
تفاوت خروجی این در خط چیه ؟
ُSystem.out.println(item);
System.out.println(item.toString());
ربطی بهoverriding داره؟
روند کار تابع println() به اینصورت هست که این تابع هر چیزی که بهش بفرستی با دستور String.valueOf() اونو تبدیل به رشته میکنه! تابع valueOf() هم هر شئی که بهش پس بشه رو اینطوری تبدیل به رشته میکنه
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
پس عملا فرقی نمیکنه شما toString() را صدا کنید یا نه اینکار خود به خود انجام میشه!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.