O interfață declară un contract — o serie de metode pe care un tip trebuie să le furnizeze — fără (sau cu implementare minimă). O clasă abstractă este o clasă parțial implementată care poate deține stare partajată și metode concrete, dar nu poate fi instanțiată. Distincția cheie: o clasă poate implementa multe interfețe, dar poate moșteni din doar o singură clasă.
