From [Agile Software Development, Principles, Patterns, and Practices: Pearson New International Edition][1]:

> Sometimes, the methods invoked by different groups of clients will overlap. If the overlap is small, then the
interfaces for the groups should remain separate. The common functions should be declared in all the overlapping
interfaces. The server class will inherit the common functions from each of those interfaces, but it will implement
them only once.

Uncle Bob, talks about the case when there is minor overlap.

What should we do if there is significant overlap?

Say we have 

    Class UiInterface1;
    Class UiInterface2;
    Class UiInterface3;
    
    Class UiIterface : public UiInterface1, public UiInterface2, public UiInterface3{};

What should we do if there is significant overlap between `UiInterface1` and `UiInterface2`?


  [1]: http://amzn.com/B00IZ0G6YG