Roadmap › OOP Concepts in C# › Module: Interfaces and Abstract Classes
Lessons in this course (15)

9. Interface vs abstract class

Intermediate★ Must knowLesson 9 of 15
InterfaceAbstract class
PurposeA contract / capability ("can do")A partial base implementation ("is a")
MultipleA class can implement manyA class can inherit only one
Fields / stateNo instance fieldsCan have fields and state
ConstructorsNoYes
ImplementationDefault methods allowed since C# 8Abstract and concrete members
Access modifiersMembers public by defaultAny
Use whenUnrelated types share behaviour; for DI and mockingRelated types share code and state
csharp
public interface IShape { double Area(); string Name => GetType().Name; }  // default implementation (C# 8)

public abstract class Shape : IShape
{
    public abstract double Area();
    public override string ToString() => $"{GetType().Name} area={Area():F2}";  // shared code
}
public class Circle(double r) : Shape { public override double Area() => Math.PI * r * r; }