Mi è stato insegnato anche questo e preferisco le interfacce dove possibile (ovviamente uso ancora l'ereditarietà in cui è ragionevole).
Una cosa penso che sia disaccoppiare il tuo codice da implementazioni specifiche. Diciamo che ho una classe chiamata ConsoleWriter e che viene passata in un metodo per scrivere qualcosa e la scrive sulla console. Ora diciamo che voglio passare alla stampa su una finestra della GUI. Bene, ora devo modificare il metodo o scriverne uno nuovo che consideri GUIWriter come un parametro. Se avessi iniziato definendo un'interfaccia IWriter e avessi preso il metodo in un IWriter, avrei potuto iniziare con ConsoleWriter (che implementava l'interfaccia IWriter) e poi scrivere una nuova classe chiamata GUIWriter (che implementa anche l'interfaccia IWriter) e poi I Dovrebbe solo cambiare la classe che viene passata.
Un'altra cosa (che è vera per C #, non è sicuro di Java) è che si può estendere solo 1 classe ma implementare molte interfacce. Diciamo che ho avuto un corso chiamato Teacher, MathTeacher e HistoryTeacher. Ora MathTeacher e HistoryTeacher si estendono da Insegnante ma cosa succede se vogliamo una classe che rappresenti qualcuno che è sia un MathTeacher che un HistoryTeacher. Può diventare piuttosto confuso quando provi ad ereditare da più classi quando puoi farlo solo una alla volta (ci sono modi, ma non sono esattamente ottimali). Con le interfacce puoi avere 2 interfacce chiamate IMathTeacher e IHistoryTeacher e quindi avere una classe che si estende da Insegnante e implementa quelle 2 interfacce.
Uno svantaggio che con l'uso delle interfacce è che a volte vedo persone duplicate codice (dal momento che devi creare l'implementazione per ogni classe implementa l'interfaccia) tuttavia esiste una soluzione pulita a questo problema, ad esempio l'uso di cose come i delegati (non sono sicuro di quale sia l'equivalente Java).
Il motivo principale per utilizzare le interfacce sulle eredità è il disaccoppiamento del codice di implementazione, ma non pensare che l'ereditarietà sia malvagia, poiché è ancora molto utile.