Abstract Class در مقابل Interface
Abstract Class هم قرارداد و هم پیادهسازی ارائه میدهد، اما Interface فقط قرارداد بین کلاسها تعریف میکند.
| ویژگی | Abstract Class | Interface |
|---|---|---|
| پیادهسازی متد | دارد | محدود |
| فیلد | دارد | ندارد |
| Constructor | دارد | ندارد |
| Multiple Inheritance | خیر | بله |
| مناسب برای | Base Class | Contract |
| Coupling | بیشتر | کمتر |
کِی از Abstract Class استفاده کنیم؟
وقتی کلاسهای مشتق رفتار و داده مشترک دارند.
کِی از Interface استفاده کنیم؟
وقتی فقط میخواهید یک قرارداد بین چند کلاس مستقل تعریف کنید.
مثال Abstract Class
public abstract class Animal { public abstract void Speak(); }
مثال Interface
public interface IAnimal { void Speak(); }
اشتباه رایج
استفاده از Abstract Class فقط برای تعریف چند متد بدون منطق مشترک.
جمعبندی
برای اشتراک رفتار → Abstract Class
برای قرارداد → Interface
