تفاوت های Interface و Abstract Class :
* یک کلاس انتزاعی(abstract Class) بعنوان یک کلاس پایه, برای یک خانواده از کلاس های مشتق شده بکار گرفته
می شود, ولی اینترفیس(Interface) برای پیاده سازی وراثت چند گانه است.
* یک کلاس معمولی فقط می تواند از یک کلاس Abstract ارث بری کند و لی همین کلاس می تواند از چندیدن
اینترفیس ارث بری کند.
* عناصر موجود در یک کلاس Abstract می تواند مانند یک کلاس معمولی انواع سطح دسترسی داشته باشد و لی
عناصر اینترفیس فقط public هستند.
* کلاس Abstract یک نوع کلاس است ولی اینترفیس یک کلاس نیست.
* یک کلاس Abstract می تواند مانندیک کلاس معمولی Instance Variable داشته باشد ولی اینترفیس نمی تواند
داشته باشد .
* وقتی در پروژه های بزرگ با تغییرات زیادی مواجه هستیم باید از کلاس Abstract استفاده کنیم, زیرا با
تغییر در کلاس پایه(Abstract) (بعنوان مثال متدی به کلاس پایه(Super Class) اضافه شود), کلاس های
مشتق شده(فرزند) مجبور نیستند آنرا پیاده سازی کنند و اجباری نیست در حالیکه پیاده سازی تمامی متد های
تعریف شده داخل اینترفیس برای کلاس های مشتق شده اجباری است.
* زمانیکه بخواهیم تمامی متد های تعریف شده در کلاس پایه بطور کامل در کلاس های مشتق شده پیاده سازی شود
باید از اینترفیس استفاده کنیم .
* زمانیکه یک کلاس باید یک اینترفیس را پیاده سازی کند به این معنی است که : این کلاس باید همه بخش های
اینترفیس را اجبارا پیاده سازی کند. بعبارت دیگر , این کلاس با قرارداد تعریف شده این اینترفیس کاملا موافق
است.
* در صورتی که نخواهیم کلیه متد های تعریف شده داخل کلاس پایه , در کلاس های مشتق شده پیاده سازی شود
باید از کلاس Abstract استفاده کنیم.
* زمانیکه وراثت چندگانه داریم از اینترفیس استفاده می کنیم.
* متد های یک اینترفیس Abstract هستند ولی یک کلاس Abstract می تواند متد غیر abstract هم داشته باشد.
* وقتی شما یک متد به کلاس Abstract اضافه می کنید , اگر این متد Abstract نباشد بطور خودکار به همه زیرکلاس
ها اعمال می شود ولی اگر به اینترفیس متدی اضافه کنیم باید آنرا در تمام کلاس های مشتق شده اضافه کنیم .
* به بیان کلی و ساده : Interface چارچوب و قالب کلی و قابلیت های یک کلاس را مشخص می کند و یک قراداد است,
درحالیکه Abstract نوع کلاس را مشخص می کند.