Interfejs deklaruje kontrakt — zestaw metod, które typ musi dostarczyć — bez (lub z minimalną) implementacją. Klasa abstrakcyjna to częściowo zaimplementowana klasa, która może zawierać wspólny stan i konkretne metody, ale nie może być instancjonowana. Kluczowa różnica: klasa może implementować wiele interfejsów, ale dziedziczyć z tylko jednej klasy.
