نکاتی راجب Abstract و Interface
- هر دو در پیاده سازی الگوی 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
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .