نمایش نتایج 1 تا 5 از 5

نام تاپیک: override شدن متدهای toString و equals ؟

  1. #1

    Unhappy override شدن متدهای toString و equals ؟

    سلام
    جایی مطالعه کردم که کلاس Object پدر تمامی کلاسهای جاواست و این دو متد از متدهای کلاس Object هستند (البته متدهای دیگر هم هستن) و برای استفاده از این دو متد باید آنها را Override کنیم
    چندتا سوال برام بوجود اومده :
    1-اگر این دو متد را override نکنیم استفاده از اونها برای شیء هامون چه خروجی خواهد داشت ؟
    2-فرض بر اینکه این دومتد متدهای کلاس آبجکت نبودند، ما باز هم میتونستیم همون تعریفی که در ذهنمون هست برای این دو تابع در کلاس مورد نظرمون انجام بدیم و همون نتیجه رو بگیریم حالا فلسفه اینکه این متدها به ارث برده بشن و بعد Override بشن چیه؟ چه سودی دار؟

    البته برای متد toString() میشه گفت برای اینکه این متد از کلاس object هست و جاوا هم اونو میشناسه و توسط برنامه نویس Override میشه به جای اینکه برای چاپ شیء از دستور

    Sysytem.out.println(obj.toString ());

    استفاده کنیم دستور زیر را استفاده خواهیم کرد:

    System.out.println( obj);


  2. #2
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,126

    نقل قول: override شدن متدهای toString و equals ؟

    با سلام. بایدی در کار نیست.
    1- در این صورت equals در صورتی true خواهد بود که هر دو آبجکت دقیقا یک آبجکت باشند. اما در صورتی که override کنید میتونید برابری رو هر جور که میخواید تعریف کنید. برای toString هم اسم کلاس @ و یه شماره هست که فکر میکنم آی دی اون آبجکت باشه.
    2- باید بدونید فواید override چی هست در کل. مثلا اگر متد toString در Object وجود نداشت، هر کلاسی ممکنه این متد رو پیاده سازی نکنه و در این صورت System.out.println(obj) خطا خواهد داد. اما وقتی یک کلاسی از یک پرنت ارث میبره آبجکت اون کلاس همه جا میتونه جای اون پرنت بشینه و نگرانی بابت این موضوع نداریم. این کار حتی باعث میشه برنامه هامون خیلی جمع و جورتر بشن و لازم نباشه برای انواع کلاس ها مثلا System.out.println جداگانه تعریف کنیم.
    آخرین ویرایش به وسیله vahid-p : سه شنبه 28 خرداد 1398 در 18:47 عصر

  3. #3

    نقل قول: override شدن متدهای toString و equals ؟

    سلام ممنون از پاسخت این قسمتو درست متوجه نشدم
    میشه بیشتر توضیح بدید؟
    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    اما وقتی یک کلاسی از یک پرنت ارث میبره آبجکت اون کلاس همه جا میتونه جای اون پرنت بشینه و نگرانی بابت این موضوع نداریم. این کار حتی باعث میشه برنامه هامون خیلی جمع و جورتر بشن و لازم نباشه برای انواع کلاس ها مثلا System.out.println جداگانه تعریف کنیم.

  4. #4
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,126

    نقل قول: override شدن متدهای toString و equals ؟

    نقل قول نوشته شده توسط kiani2012 مشاهده تاپیک
    سلام ممنون از پاسخت این قسمتو درست متوجه نشدم
    میشه بیشتر توضیح بدید؟
    میخوام بگم در کد نویسی به شدت صرفه جویی میشه. در خیلی از متدها (توابع) شما لازم نیست برای انواع کلاس های شبیه به هم (یعنی دارای یک والد parent) چندین متد بنویسید. کافیه یکی برای اون والد بنویسید و بقیه فرزند ها میتونن به جای اون والد در اون متد قرار بگیرن.
    از همون مثالهایی که در شی گرایی زیاد میزنن، بگم شاید بهتر باشه: فرض کنید ما یک تابع داریم که یک خودرو رو به عنوان ورودی میگیره و تعداد چرخ هاش رو مشخص میکنه.
    خب حالا اگر رابطه والد/فرزندی در شی گرایی استفاده نکنیم، ما باید یک تابع برای پراید بنویسیم، یک تابع برای پژو یک تابع برای X.
    برای همین ما میاییم یک سری خصیصه های مشترک رو به عنوان کلاس خودرو تعریف میکنیم. حالا فرزندهای این کلاس میتونن خصیصه های بیشتری رو داشته باشند یا خصیصه های والد رو تغییر بدن. اما در هر حال اگر خصیصه تعداد چرخ در والد وجود داشته باشه، پس تمام فرزندهاش هم این خصیصه رو دارن.
    پس اگر تابعمون بگیم مقدار خصیصه تعداد چرخ رو چاپ کن، الان هر آبجکتی از پژو یا پراید میتونه اینجا قرار بگیره در صورتی که ما خودرو رو به عنوان ورودی تابع تعریف کردیم ولی چون پژو و پراید فرزند کلاس خودرو هستند، خصیصه های اون رو به ارث بردن و در نتیجه حتما این خصیصه رو دارن پس مشکلی پیش نمیاد. در غیر این صورت تضمینی در داشتن اون خصیصه ها نیست.

  5. #5

    نقل قول: override شدن متدهای toString و equals ؟

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    میخوام بگم در کد نویسی به شدت صرفه جویی میشه. در خیلی از متدها (توابع) شما لازم نیست برای انواع کلاس های شبیه به هم (یعنی دارای یک والد parent) چندین متد بنویسید. کافیه یکی برای اون والد بنویسید و بقیه فرزند ها میتونن به جای اون والد در اون متد قرار بگیرن.
    از همون مثالهایی که در شی گرایی زیاد میزنن، بگم شاید بهتر باشه: فرض کنید ما یک تابع داریم که یک خودرو رو به عنوان ورودی میگیره و تعداد چرخ هاش رو مشخص میکنه.
    خب حالا اگر رابطه والد/فرزندی در شی گرایی استفاده نکنیم، ما باید یک تابع برای پراید بنویسیم، یک تابع برای پژو یک تابع برای X.
    برای همین ما میاییم یک سری خصیصه های مشترک رو به عنوان کلاس خودرو تعریف میکنیم. حالا فرزندهای این کلاس میتونن خصیصه های بیشتری رو داشته باشند یا خصیصه های والد رو تغییر بدن. اما در هر حال اگر خصیصه تعداد چرخ در والد وجود داشته باشه، پس تمام فرزندهاش هم این خصیصه رو دارن.
    پس اگر تابعمون بگیم مقدار خصیصه تعداد چرخ رو چاپ کن، الان هر آبجکتی از پژو یا پراید میتونه اینجا قرار بگیره در صورتی که ما خودرو رو به عنوان ورودی تابع تعریف کردیم ولی چون پژو و پراید فرزند کلاس خودرو هستند، خصیصه های اون رو به ارث بردن و در نتیجه حتما این خصیصه رو دارن پس مشکلی پیش نمیاد. در غیر این صورت تضمینی در داشتن اون خصیصه ها نیست.
    بله درسته ممنون

تاپیک های مشابه

  1. علت استفاده از متد equals
    نوشته شده توسط alidoran در بخش برنامه‌نویسی جاوا
    پاسخ: 3
    آخرین پست: سه شنبه 19 تیر 1397, 15:49 عصر
  2. سوال: override ToString
    نوشته شده توسط mhsmity در بخش C#‎‎
    پاسخ: 2
    آخرین پست: پنج شنبه 30 خرداد 1392, 17:58 عصر
  3. سوال: متد ( ) equals ?
    نوشته شده توسط esmaeilbf در بخش برنامه‌نویسی جاوا
    پاسخ: 1
    آخرین پست: جمعه 27 اردیبهشت 1392, 21:05 عصر
  4. override کردن متد ToString در یک کلاس
    نوشته شده توسط Developer Programmer در بخش C#‎‎
    پاسخ: 1
    آخرین پست: دوشنبه 17 خرداد 1389, 21:02 عصر
  5. مشکل با override Tostring() برای لیست ها جنریک
    نوشته شده توسط shima_85 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 08 مهر 1388, 16:07 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •