Seeing this UML class diagram :
FileHandler, Uploader and Deleter are abstract classes. The four bottom classes are implementations. They extend on FileHandlerInterface which requires a handle method to validate the contract. But this method isn't in the implementations, it is in their parents (Uploader & Deleter).
I did this because I didn't like the idea of implementing an interface in an abstract class.
Although, I feel like there's a huge flaw in this design. The fact that it is needed to go through parents to know how the child works makes me feel like it's bad design.
To be more precise, it is unclear that UploaderComplete's direct parent has a method "handle" even thought it needs it. It could be in Uploader's parent (and recursively).
Where is this design wrong and how could I improve it ?