آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نکاتی راجب Abstract و Interface

Y.P.Y  8 سال پیش  8 سال پیش
0 0

- هر دو در پیاده سازی الگوی polymorphism استفاده می شن.

- هر دو برای پیروی از یک شِمای و اسکلت ثابت هستند.

- هردو گزینه خوبی برای استاندارد سازی API داخلی هستن.

- هردو بهترین گزینه برای کار تیمی/گروهی هستن.

- هر دو میتونن تعیین کنن که چه چیز باید پیاده سازی بشه بی توجه به اینکه چطور پیاده سازی بشه.

- هر دو برای انجام dependency injection می تونن استفاده بشن.

اما:
- متدهای کلاس Abstract میتونن حاوی کد/محتوا باشن تا یک عملیات رو برای همه کلاس های مصرف کننده فراهم کنن. ولی Interface ها نمی تونن.

- کلاس Abstract میتونه متد private و protected داشته باشه، اما Interface نمی تونه.

- کلاس Abstract در واقع ترکیبی از Interface و کلاس هستش ولی Interface یک کلاس مجازی.

- کلاس Abstract قابلیت instantiation یا همون new شدن رو نداره. فقط میشه inheritance/extend بشه. و درطرف دیگر Interface رو فقط میشه  implement کرد.

- یک کلاس فقط از یک کلاس Abstract می تونه extend بشه. ولی یک کلاس میتونه از 65535 عدد interface مختلف implement بگیره.

- یک Interface می تونه از چندین Interface مختلف extend بشه. اما  کلاس Abstract نمی تونه.

- اینترفیس معمولاً در طراحی Listener ها، Callback ها، تزریق وابستگی و سازگارسازی کلاس های غیرمرتبط استفاده داره، اما abstract در همه جا.

- کلاس Abstract میتونه فیلد، نوع final static و متد داشته باشه. اما Interface فقط می تونه متد(خالی) و فیلد final static داشته باشه.

- یک کلاس معمولی(concrete) باید همه متدهای interface رو implement کنه، اما در کلاس Abstract اجباری نیست.

- سطوح دسترسی متدها و فیلدها در Abstract میتونه public, private, protected باشه. اما در Interface فقط public میتونه باشه.

زمانی از abstract class استفاده کنید که بدنه متد هم لازمه از قبل کدنویسی بشه، و زمانی از interface استفاده کنید که لازم نیست بدنه متد از قبل کدنویسی بشه یا کلاس نیاز داره که چندین interface رو پیاده سازی کنه.

منبع: https://yousha.blog.ir

 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .