Solution: Don't inherit from GameObject. Make GameObject "final" and simply be a container of components. Move all object-specific behaviour into the components.
But, I still need inheritance. DuckComponent would need to inherit from Component in order for my GameObject to add that to the list of components attached.
Am I wrong?
This sounds like the exact case where you'd use a trait.
Yes, I think you're right!
You'd use interfaces (or a similar behaviour-indirection mechanism like function pointers). In Rust I suppose you'd use a trait.