تفاوت interface و کلاس های abstract

همان طور که می دانید در #C و جاوا مانند++C ارث بری چندگانه نداریم، یعنی یک کلاس می تواند فقط از یک کلاس دیگر به ارث برسد، اما یک کلاس می تواند از چند interface ارث بری داشته باشد.

 

اما در نهایت هر دوی اینها چه کمکی به شما می کنند؟

زمانی که شما یک interface معرفی می کنید، در واقع یکسری الگو و خصوصیت تعریف کرده اید که پیاده سازی نشده است، کلاسی که این interface را پیاده می کند، این مزیت را به شما می دهد تا کلاس شما بتواند بخشی از دو کلاس باشد؛ یکی از طریق ارث بری در سلسله مراتب وراثتی کلاس ها و دیگری پیاده سازی یک رابط.

اگرچه یک کلاس abstract رفتاری مشابه یک interface دارد، اما ماهیتا یک کلاس بوده و این خصوصیت تعیین می کند در یک کلاس abstract می تواند یک یا چند متد abstract داشته باشد.

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

اگر یک کلاس abstract همه اعضای خود را به صورت abstract تعریف کرده باشد، دقیقا مانند یک رابط با آن رفتار می شود.

در بالا با برخی شباهت ها و تفاوت های کلاس abstract و interface آشنا شدیم. در زیر برخی از این شباهت ها و تفاوت ها را به صورت ساختار بندی شده توضیح می دهیم.

 

 

ارث بری چندگانه

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

یک کلاس می تواند از چند interface به ارث برسد (اصطلاحا چند interface را پیاده می کند).

 

پیاده سازی پیشفرض

یک کلاس abstract می تواند دارای یک سری اعضا باشد که پیاده سازی شده اند و یکسری اعضا که پیاده سازی آنها بر عهده کلاس هایی است که از آن به ارث رسیده اند. (این اجزا با کلمه کلیدی abstract مشخص می شود).

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

  

دسترسی به اجزا

در یک کلاس abstract می توان سطوح دسترسی به یک جزء از کلاس را مشخص کرد.

در یک رابط هیچ صحبتی از سطوح دسترسی به میان نمی آید.

  

فیلد ها و ثابت ها

یک کلاس abstract می تواند شامل فیلد ها و ثابت های مختلفی باشد.

یک رابط نمی تواند شامل یک فیلد یا یک ثابت باشد.

  

اضافه کردن یک عملیات جدید

براحتی می توانید یک الگوی خاص به کلاس abstract اضافه کنید، بدون این که نیاز داشته باشید در کلاس های مشتق شده تغییری بدهید.

اگر بخواهید الگویی جدید به یک interface اضافه کنید، باید این متد را پیاده سازی کنید.

همان طور که مشاهده کردید interface و کلاس abstract هریک مزایا و معایب خود را دارد. این که کدام در چه جایی می تواند راه حل شما باشد، به عهده شماست.

برای دسترسی به اطلاعات بیشتر می‌توانید

به لینک‌ زیر مراجعه کنید:

http://www.codeproject.com/Articles/۱۱۱۵۵/Abstract-Class-versus-Interface

۲ـ http://geekswithblogs.net/mahesh/archive/۲۰۰۶/۰۷/۰۵/۸۴۱۲۰.aspx

۳ـ http://programmingincsharp.com/what-is-the-difference-between-an-abstract-class-and-an-interface-in-c/

منبع :روزنامه جام جم ( www.jamejamonline.ir )

/ 1 نظر / 92 بازدید
dattis

www.dattis.ir شرکت تحلیل گران اطلاعات و نوآوران داتیس