Sto leggendo J. Bloch Java efficace e ora sono in sezione eredità vs composizione. Per quanto ho capito ha detto che l'eredità non è sempre buona.Ereditarietà Java vs inizializzazione
Una causa correlata di fragilità nelle sottoclassi è che la loro superclasse può acquisire nuovi metodi nelle versioni successive. Supponiamo che un programma dipenda dalla sua sicurezza sul fatto che tutti gli elementi inseriti nella serie soddisfano alcuni predicati. Questo può essere garantito da sottoclasse della raccolta e sovrascrivendo ogni metodo capace di aggiungendo un elemento di assicurare che il predicato è soddisfatto prima aggiungendo l'elemento. Funziona bene fino a un nuovo metodo in grado di inserendo un elemento viene aggiunto alla superclasse in una successiva versione .
Ma perché non funziona? La superclasse è solo l'interfaccia Collection
e se aggiungiamo un nuovo metodo abbiamo solo un errore in fase di compilazione. Questo non è dannoso in assoluto ...
L'aggiunta di un nuovo metodo a una super * classe * non causa un errore simile in fase di compilazione. Infatti, l'aggiunta di metodi 'default' a un'interfaccia non produce neanche un errore di compilazione. –
Se stai parlando di 'java.util.Collection', NON è una super classe. Questa è solo un'interfaccia. – Alderath
L'aggiunta di un metodo astratto a super classe o interfaccia è un errore in fase di compilazione se la sottoclasse viene ricompilata, ma ciò potrebbe non avvenire. –