تالار گفتمان nCIS.ir

نسخه‌ی کامل: چندین سوال در رابطه با override
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام و عرض ادب

راستش من چندین جا خوندم override به معنی بازنویسی متد هستش که اگه کلاسی رو از یه سوپر کلاس به ارث ببرین و بخواین از یه متد با همون نام و بدنه ی متفاوت توی ساب کلاس استفاده کنین باید از override استفاده کنین،حالا من سوالم اینجاست که چه کاریه متدی رو override کنیم،بیایم و یه اسم دیگه ای برای متدمون انتخاب کنیم تا نیازی به override نداشته باشیم.

حالا یه سوال دیگه،این که وقتی یه کلاس رو از سوپر کلاسی extend کنیم(به عنوان مثال یک کلاس رو از کلاس FragmentPagerAdapter به ارث ببریم،دو متد override شده باید حتما توی کلاس باشه یکی  public Fragment getItem(int i) و یکی public int getCount،من توی یه سورس کد دیدم که وقتی viewpager رو با اداپتر ساخته شده از کلاس FragmentPagerAdapter   ست میکنیم،من دیدم اصلا این تابع هارو فراخونی نکردن توی کلاس اصلی،و فقط یه شی ازش ساختن و viewpager رو باهاش ست کردن،خواستم بدونم آیا متد های override شده خاصیت دیگه ای هم داره که فقط با ساختن شی بتونیم ازش استفاده کنیم توی کلاس اصلی؟
رونویسی متدها، یکی از قدرت‌ها و زیبایی‌های برنامه‌نویسی شئ‌گراست که به شما اجازه میده یک متد، روی اشیاء مختلف در سلسله‌مراتب وراثت، رفتارهای متفاوتی رو از خودش نشون بده. مثلاً شما و پدرتون هر دو راه میرین ولی ممکنه نحوه‌ی راه‌رفتن شما با پدرتون فرق کنه. حالا ممکنه شما لی‌لی هم حرکت کنید یا دونده‌ی خوبی هم باشین ولی پدرتون اینکار رو نکنه. در اینجا شما یه متد (رفتار) جدید دارین که والدتون نداشته ولی اگه همون راه‌رفتن رو به شکل متفاوتی انجام بدین، دارین رفتاری که به شما ارث رسیده رو رونویسی میکنین. اینکه کدوم روش مناسب‌تره، بستگی به نیاز شما در برنامه و سیاست کاری شما و تحلیلی که در پروژه به‌کار بستین داره و نمیشه گفت هرکدوم از این روشها اشتباهه. باید در جایگاه مناسبش از مزایای هرکدوم استفاده کنید.

درمورد متدهایی که با مشتق‌شدن از یک کلاس، باید حتماً اونها رو پیاده‌سازی کنید، باید بگم که برخی از متدها در کلاس‌های والد بعنوان abstract تعریف میشن و یا از رابط‌ها (interface) بهشون میرسه و به این متدها که بدنه ندارن میگیم متد ناقص و اگه کلاسی از این کلاسها که دارای متدهای abstract هستن مشتق بشه، یا باید برای این متدها بدنه بنویسه و اونها رو کامل کنه و یا اینکه خود کلاس هم abstract بشه تا بخاطر وجود متدهای ناقص، نتونیم ازش شئ ایجاد کنیم.

تمامی این موارد با جزئیات و مثال‌های متعدد توی پکیج مقدماتی اندروید توضیح داده شدن (http://shop.ncis.ir/basic-android)