دلایل استفاده از Interface و Absract class به اندازه‌ای از هم متفاوتند که لیست کردن فرقهاشان مانند لیست کردن فرقهایه پیچ‌گوشتی با آچار فرانسه میماند. اگرچه میشه با هر دوشان میخ‌کوبید ولی اینکه بخواهیم فرقهاشان را به این سورت لیست کنیم معنی نمیده.
Interface برایه نشان دادن قابلیتها است. اینکه یک کلاس چه قابلیتهایی دارد.
Absract class برایه نشان دادن نوع کلاس است.
برایه مثال درخت باینری ، از نوع درخت است،دو تا از قابلیتهاش این است که نُدهاش را یکی یکی از کم به زیاد لیست کند یا خودش را سورت کند.
برایه همین اینکه درخت باینری از یک کلاس ابسترکت کلاس "درخت" به ارث ببره و اینترفیسهایه ISortable و IEnumerable را پیاده سازی کند به نظر درست میاد.
حالا میشه در مورد کلی نکات بیربط دیگر یک Interface با یک Abstract Class فرق پیدا کرد ولی هر کدام برایه بیان کردن مفاهیم کاملا مختلفی استفاده میشند.
در ضمن شباهتی که بیان شده "و یکی از وجوه بارز اونها پیاده‌سازی مفهوم چند ریختی است " مفهوم چند ریختی یک نوع نیست، چندین نوع مختلف است، اینترفیس برایه بیان کردن قابلیتهایه چندریختی است و ابسترکت کلاس برایه بیان کردن نوع هایه چند ریختی. پس در اصل این شباهتشان نیست بلکه فرق اصلیشان است.