What is the practical difference between inheritance, and a trait or interface with a default implementation? It seems like both risk the addAll() bug.
Multiple inheritance is basically strictly more powerful than either traits or interfaces with default implementations.
I don't think traits or interfaces with default implementations prevent the bug, as I can imagine a Rust implementation that would do something similar.
This leads the programmer towards composition and delegation.
To aid with this, Delphi even has some sugar for delegation[1].
[1]: https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Usin...