Το ένα δεν αποκλείει το άλλο.
Γενικά μια class μπορεί να έχει πολλά interfaces. Το κάθε ένα αναπαριστά μια λειτουργικότητα της κλάσης.
Οι clients που χρησιμοποιούν την κλάση για μια συγκεκριμένη λειτουργία δεν χρειάζεται να γνωρίζουν για τις υπόλοιπες, γιαυτό και αναφέρονται σ 'αυτήν σαν interface.
Π.χ. Ο client μπορεί να περιμένει ένα IList. Αυτό δίνει ευελιξία ώστε να προγραμματιστή να υλοποιήσει ArrayList, List, SortedList ... η οποιαδήποτε δομή ανάλογα με τα πλεονεκτήματα τους χωρίς να επηρεαστεί ο client.
Client μπορεί να είναι και το unit testing γιαυτό και τεστάρεται καλύτερα μια (μεγάλη) κλάση που έχει interfaces. Τεστάρουμε χωριστά την κάθε λειτουργία της.
Inheritance χρησιμοποιούμε για να απομονώσουμε κοινό κώδικα δύο οι περισσοτέρων παρόμοιων κλάσεων.