تفاوت اینترفیس و Abstract در برنامه نویسی

در بحث برنامه نویسی شی گرایی با مفاهیم به نام اینترفیس ( Interface ) و کلاس های Abstract روبرو هستیم که کارکرد و شباهت های زیادی به هم دارند.


اینترفیس در برنامه نویسی چیست؟

اینترفیس (Interface) در برنامه‌نویسی یک قرارداد (Contract) است که تعیین کننده‌ی مشخصه‌ها و عملکردهایی است که یک کلاس باید پیاده‌سازی کند.


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




interfaceMyInterface{  
funmyMethod() 
}
classMyClass:MyInterface{
overridefunmyMethod(){
println(&quotMyMethodimplementationinMyClass&quot)
} } 


کلاس Abstract در زبان کاتلین

یک کلاس Abstract (که به عنوان “کلاس انتزاعی” هم نامیده می‌شود) در برنامه‌نویسی یک نوع کلاس است که نمی‌توانید از آن یک نمونه مستقیم ایجاد کنید.

این کلاس‌ها معمولاً برای ارائه یک پایه انتزاعی برای کلاس‌های زیرمجموعه (subclasses) استفاده می‌شوند.

 abstractclassMyAbstractClass{
abstractfunmyAbstractMethod() 
 funmyConcreteMethod(){
println(&quotConcretemethodinabstractclass&quot)  }
} 


فرق اینترفیس با کلاس Abstract

تا اینجا با ساختار هر دو مورد به خوبی آشنا شدیم و دیدیم که تقریبا کارهای مشابهی انجام میدهند. اما چه تفاوتی باهم دیگر دارند؟

  • متد سازنده: در کلاس های Abstract میتوانید متدسازنده داشته باشید اما برای Interface نمیتوانید متد سازنده تعریف کنید.
  • متدها: در کلاس های Abstract میتوانید متدهایی داشته باشید بخش بدنه آنها نیز پیاده سازی شده اما در اینترفیس فقط متدها تعریف میشوند.
  • ارث بری: کلاس های Abstract میتوانند توسط کلاس های دیگر ارث برده شوند اما اینترفیس چنین قابلیتی ندارد.
  • نوع متد: متدها در کلاس های Abstract میتوانند بصورت عمومی یا خصوصی تعریف شوند اما در اینترفیس متدها حتما باید بصورت عمومی تعریف شوند.


منبع: تفاوت اینترفیس و کلاس Abstract