What is the proper approach on components / bahaviour sharing ( by example )?

I’m quite confused about using components in Unreal. Mainly because they are invensively using inharitance, and secondly because basic classes also cover a lot of functionality that is usually hidden inside ( like a black box ).

My problem is, that I’m working on some AIs - actually a couple of different units that will be sharing some behaviours. But on the other hand each one will be quite different on basics - some of them are just walking, some flying, some walking and flying from time to time and many different smaller stuff.
First I thought that I should make a component for ( more or less ) each of those mechanics, and then make BTTasks for those mechanics. But then I realized that I’m not sure how to do it in the most generic possible way.

Let’s say I’m considering flying behaviour. First of all Character Movement Component ( CMC ) ( that is attached to ACharacter class ) already covers some very basics of “flying”. So my first thought was to make some extension of that component. But Character Controller will push the basic CMC afterall, so if I add my extended version to my Character Controllers ( that are ACharacted based ), I would have two movement components then, which seems to be wrong to me ( the basic one, and the custom one ).
I could also make a new, clean component that makes a use of the original CMC that could highly depend on it - but I’m not sure if that’s correct approach on it, since it lacks of encapsulation.
I could also make extended ACharacter class that covers the functionality of flying, and then make AI uints on the top of that, but when I will go that way, I will face multiple inharitance sooner or later.

What’s the best approach on that then? How to make it as flex as possible with UE4 correct approach? I would like to stay away from making BTTask that will be valid only for one specific characters as much as possible ( of course it will be necessary at some point ).

Thanks in advance.