Back to results for “OOP”
C# › Interfaces & Abstract Classes

How do you decide between using an interface versus an abstract class for a given design?

Intermediate

Answer

Use an abstract class when subclasses genuinely SHARE common implementation/state and there's a clear 'is-a' hierarchy (a class can only extend ONE abstract class); use an interface when you need to define a CAPABILITY/CONTRACT that unrelated classes can all implement independently (a class can implement MANY interfaces) — interfaces express 'can-do' relationships, abstract classes express 'is-a' relationships.
// Interface: unrelated types sharing a CAPABILITY
public interface IFlyable { void Fly(); }
public class Bird : IFlyable { public void Fly() { } }
public class Airplane : IFlyable { public void Fly() { } }

// Abstract class: related types sharing an IDENTITY and implementation
public abstract class Animal { public abstract void MakeSound(); }
Real-world example Choosing an interface for a cross-cutting capability like ISerializable, versus an abstract class for a genuine domain hierarchy like Animal -> Dog.

Common follow-ups: Can an abstract class ALSO implement one or more interfaces, combining both approaches?