C# › Interfaces & Abstract Classes
How do you decide between using an interface versus an abstract class for a given design?
IntermediateAnswer
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.