مقایسه ویژگی های Java Interface و Abstract Class

سلام به همه پی وی لرنی های عزیز!
یک Interface یا رابط وظیفه دارد که تعیین نماید که یک کلاس چه کاری را انجام دهد اما در چگونگی انجام آن دخالتی ندارد. متغیرهای اعلام شده در یک رابط بصورت پیش فرض عمومی ، استاتیک و نهایی هستند. کلاس A که با کلمه کلیدی abstract نشان داده می شود یک کلاس انتزاعی یا abstract class نامیده می شود که باید کلیه متود هایی که در یک کلاس انتزاعی به عنوان abstract اعلام می شوند را تعریف نماید.
در این مقاله می خواهیم به مقایسه ویژگی های Java Interface و Abstract Class بپردازیم.

مقایسه ویژگی های Java Interface و Abstract Class

بیایید پیش از آن که به سراغ مقایسه ویژگی های Java Interface و Abstract Class برویم مختصری راجع به این دو بدانیم.

Interface چیست؟

Interface مانند کلاس ها نیست نمی تواند از متدها و متغیر ها برخودار شود اما متودهای موجود در Interface به صورت پیش فرض Interface هستند. برای ایجاد یک abstraction کامل از یک Interface استفاده می شود زیرا متود ها در Interface فاقد body هستند و نیاز است که قبل از دسترسی توسط کلاس پیاده سازی شوند.
به طور کلی ، یک کلاس که Interface را پیاده سازی می کند باید تمام متود های اعلام شده در یک Interface را تعریف کند اگر اینگونه نباشد ، پس باید به عنوان یک کلاس abstract اعلام شود.
نمی توان Interface را در بیش از یک کلاس گسترش داد زیرا جاوا اجازه این کار را نمی دهد. برای اعلام یک Interface ، ما باید از کلمه کلیدی Interface استفاده کنیم و Interface مورد نیاز خود را برای استفاده از کلمه کلیدی implement ها به کار بگیریم.

Abstract چیست؟

کلاسی که با کلمه کلیدی Abstract شروع می شود یک کلاس Abstract نامیده می شود که بر خلاف یک کلاس معمولی می تواند دارای Abstract (متود بدون body) و متودهای concrete (متود همراه با body) باشد. کلاس Abstract  را نمی توان از طریق مسنجر یافت ، یعنی نمی توانیم برای آن شیء ایجاد کنیم اما می توانیم با ایجاد کلاس دیگری که کلاس Abstract را گسترش می دهد و اجرای متود ها را فراهم می کند ، به کلاس Abstract رفرنس دهیم.

مقایسه کلی

در ادامه مقایسه ویژگی های Java Interface و Abstract Class جدولی ارائه کرده ایم که می تواند در شناخت تفاوت های Interface و Abstract Class مفید باشد.

تفاوت های اساسیAbstract ClassJava Interface
نوع متودیک کلاس می تواند Abstract می تواند (متود بدون body) و هم متودهای concrete (متود همراه با body) را باشد.در Interface ،فقط می توانیم از متود های Abstract استفاده کنیم. از Java 8 به بعد Interface همچنین می تواند متود های ایستا و پیش فرض داشته باشد
سینتکسیک کلاس Abstract می تواند به شرح زیر اعلام شود:

  • ;()Public abstract void classes
  • ;()public abstract void strength
یک interface می تواند به صورت های زیر نیز اعلام شود:

  • public interface shape{Void draw_rect();Void draw_square();}
متغیر نهایییک کلاس Abstract می تواند متغیرهای نهایی و غیر نهایی باشد.interface فقط می تواند متغیر نهایی داشته باشد.
پیاده سازییک کلاس Abstract می تواند اجرای همه متود های Abstract در interface را فراهم کند.در interface نمی توان کلاس Abstract را ارائه داد.
نوع متغیریک کلاس Abstract می تواند انواع متغیرها یعنی نهایی ، غیر نهایی ، استاتیک ، غیر استاتیک ، خصوصی ، عمومی و غیره را داشته باشد.interface فقط می تواند متغیرهای عمومی ، استاتیک و نهایی داشته باشد.
قابلیت دسترسی به اعضای دادهیک کلاس Abstract می تواند اعضای کلاس را به صورت خصوصی، محافظت شده، عمومی و غیره داشته باشد.یک interface فقط می تواند اعضای کلاس عمومی را داشته باشد زیرا اعضای داده interface بطور پیش فرض عمومی هستند.
اجرای چندگانهیک کلاس Abstract می تواند کلاس جاوا دیگری interface های چندگانه را پیاده سازی کند.یک interface فقط می تواند یک interface دیگر را گسترش دهد.
زمان استفاده وقتی بعضی از کلاس ها نیاز به استفاده از چند خط کد داشته باشند باید از کلاس Abstract استفاده کرد. بنابراین می توانیم این کد را در یک کلاس انتزاعی قرار دهیم و توسط همه کلاسهای مرتبط گسترش دهیم.Interface را می توان در صورت نیاز به دستیابی به inheritances های متعدد، abstraction کامل با اجرای تمام متودهای اعلام شده در Interface توسط یک کلاس که Interface را اجرا می کند ، استفاده کرد.

کلام آخر

در این مقاله به مقایسه ویژگی های Java Interface و Abstract Class پرداختیم. بر حسب نیاز می توان هم از Java Interface و هم Abstract Class استفاده کرد زیرا استفاده تؤم از هر دو بهترین روش برای طراحی است.
امیدوارم این مقاله مفید بوده باشد.
با پی وی لرن همراه باشید.

به اشتراک بگذارید