"Comportamento generale" non è ciò di cui tratta un'interfaccia.
Comprendi che l'interfaccia può significare due cose diverse in OOP.
L'interfaccia intrinseca di un oggetto è in realtà solo un insieme di messaggi che puoi inviare chiamando i suoi metodi. Non c'è un comportamento definito qui.
Esiste anche il tipo di interfaccia esplicita che alcune lingue hanno. Questo compete con le classi astratte ma ha un insieme leggermente diverso di regole a seconda della lingua.
Con i tipi astratti puoi definire un comportamento che può essere ignorato e che puoi pensare come "comportamento generale". Puoi fare lo stesso trucco in alcune versioni di alcune lingue con un tipo che, sfortunatamente, hanno deciso di chiamare "interfaccia".
Queste interfacce esplicite sono state fornite solo di recente. Lo hanno aggiunto perché volevano non rompere il codice legacy quando espandevano le interfacce pubblicate. Ciò consente loro di fornire quello che preferisco chiamare "comportamento predefinito". È dubbio che avrebbero chiamato questo tipo di "interfaccia" se sapessero che alla fine avrebbe permesso questo.
Quindi no, il comportamento "generale" è molto più una cosa astratta di classe. Ora con la composizione, è una cosa comportamentale "predefinita". Dall'esterno sembra che sia la stessa cosa.