Un'interfaccia dichiara un contratto — un insieme di metodi che un tipo deve fornire — con nessuna (o minima) implementazione. Una classe astratta è una classe parzialmente implementata che può contenere stato condiviso e metodi concreti ma non può essere istanziata. La distinzione fondamentale: una classe può implementare molte interfacce ma ereditare da una sola classe.
