Ένα interface δηλώνει ένα συμβόλαιο — ένα σύνολο μεθόδων που πρέπει να παρέχει ένας τύπος — χωρίς (ή ελάχιστη) υλοποίηση. Μία abstract class είναι μια μερικώς υλοποιημένη κλάση που μπορεί να περιέχει κοινή κατάσταση και συγκεκριμένες μεθόδους αλλά δεν μπορεί να δημιουργηθεί. Η βασική διαφορά: μια κλάση μπορεί να υλοποιήσει πολλά interfaces αλλά να κληρονομήσει από μόνο μία κλάση.
