View Full Version : سوال: کلاسabstract
yosof.a.a
شنبه 03 تیر 1396, 11:25 صبح
لطفا چرایی استفاده از کلاس های ابسترکت (abstract) را توضیح کامل دهید
با تشکر
vahid-p
شنبه 03 تیر 1396, 17:37 عصر
خب اگر تفاوت کلاس معمولی با کلاس abstract رو بگم مشخص میشه:
کلاس معمولی تمام متدهاش باید بدنه داشته باشند (یا خودشون یا از کلاسی که ارث بردن)
یعنی ما به ازای هر متد میگیم چه کاری باید انجام بشه و مشخصه.
اما کلاس abstract این امکان رو به ما میده علاوه هم متدهایی داشته باشیم که بدنه داشته باشند و هم متدهایی که بدنه نداشته باشند. پس خیلی شبیه به کلاس معمولی هستند با یک امکان اضافه که میتونیم متدهای abstract داشته باشیم. در کلاس abstract فیلد هم میتونیم داشته باشیم، اما کمبودی که نسبت به کلاس معمولی داره اینه که نمیتونیم مستقیما ازش شی بسازیم. حتما باید یک زیرکلاس اون رو پیاده سازی کنه. حتی اگر تمام متدهاش بدنه داشته باشند و هیچ متد abstract ای نداشته باشه باز هم باید ازش زیرکلاس بسازیم.
MouseAdapter یک کلاس abstract هست که متدهای MouseListener که یک interface هست رو پیاده سازی میکنه اونم با بدنه اما بدنه خالی! علتش هم اینه که شما اگر برای هندل کردن یک رخداد موس بخواید کاری انجام بدید از MouseAdapter استفاده کنید فقط اون متدی که میخواید بدنش رو تغییر میدید. ولی MouseListener باید تمام متدهاش رو پیاده سازی کنید و الکی کد شلوغ میشه!
شاید بگید خب اینکه در کلاس معمولی هم امکان پذیره، ولی کاربرد کلاس abstract اینجا خلاصه نمیشه. هر چند تو همین مورد هم وقتی از کلاس abstract استفاده کنید در کد نویسی خود جاوا بهتون راهنمایی میکنه که قصد طراح این بوده که برخی متدها رو خودتون پیاده سازی کنید.
برای همین تو جاوا نمیتونید بنویسید:
new MouseAdapter();
و اگر از IDE استفاده کنید خودش تبدیل میکنه به:
new MouseAdapter(){};
این کروشه به علت abstract بودنه کلاس هست و پیشنهاد میکنه تغییرش بدید.
اگر کلاس abstract متد abstract داشته باشه به این صورت در میاد:
new MouseAdapter() { @Override
public void mouseExited(MouseEvent e) {
}
};
و شمارو مجبور میکنه متدی که abstract هست و بدنه نداره موقعی که میخواید یک شی ازش بسازید (new Mo...) بدنه اش رو تکمیل کنید.
این دو کد آخر هر دو یک نوع زیرکلاس ساخت هست ولی به صورت inline
خلاصه یک abstract میگه من پیاده سازی بخشی از کد رو انجام دادم، و بخشی از کد الگوش رو به ما میده که بسته به کارمون باید اون رو خودمون بنویسیم
اگر این توضیحات کافی نبود این لینک هم که قبلا بحث شده رو توصیه میکنم بخونید:
http://barnamenevis.org/showthread.php?152516
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.