You probably want to drop inheritance completely. It's certainly not working for you, and it's probably wrong, anyway. If you have that many relations, delegation is probably a more suitable pattern.
Implement your hierarchy through interface extension, so the interfaces model your preferred class hierarchy. Then implement your classes independently. The animals example won't help, because it follows a true is-a model, but let's try company employees to illustrate.
You've got a Person object, containing names, social security details, etc. You planned on extending person with Employee, Manager, ITSpecialist, Surgeon, HeartSurgeon, what-have-you. For anything that doesn't really describe an is-a relationship, use delegation. Managers aren't necessarily Employees: they could be contractors. They're certainly not Persons (pun intended, but what I actually mean is that Manager is a role that a Person plays, not something that a Person inherently
is). So if you wanted to model a hospital administrator who is a heart surgeon, you'd have something like this:
Person: Name Al the HeartSurgeon/Manager
getJobs() -> { HeartSurgeon (interface extending Surgeon, Doctor), Manager (interface extending AdminStaff) }
If you particularly wanted to model this as a PersonHeartSurgeonManager interface, you have all methods from all interfaces in one class (that probably doesn't extend anything, or at best something like "AbstractPersistableObject"), then have things like
Code:
public int getScalpelSkillLevel () {
return getHeartSurgeon().getScalpelSkillLevel();
}