Why is it that my gut gets bad feeling when someone talks about multiple inheritance? Warm blooded animal? What class is that? It just provides a constraint that the metabolism has constant blood temperature. Which does in no way rectify to be a class. In "natural" taxonomy you always have single inheritance. Multiple inheritance is something so artificial that I can't find it useful for anything. There are always better ways to describe what you want to express with it.
q.
I agree that one should avoid multiple inheritance whenever possible. But occasionally it is necessary.
Getting back to Geert's example. If I wasn't interested in flight I could postulate:
Duck -specialises-> swimming Bird -specialises-> Bird -specialises-> warm blooded Animal -specialises-> Animal
(nice single inheritance)
and if I wasn't interested in blood I could postulate:
Duck -specialises-> swimming Bird -specialises-> Bird -specialises-> flying Animal -specialises-> Animal
(another single inheritance)
In "natural" taxonomy - in the Linean sense - you are constrained by the classifications that enforce single inheritance - since it relied on
external appearances. I believe that it was
specifically designed to generate a tree (as opposed to a lattice). Modern genetic biology has found real problems with the original classification and some plants (Australian, of course

) are being moved around. Whereas you'll note that Geert's example uses other than visual characteristics to classify.
Can someone explain exactly why the two single inheritance branches above are wrong.
If they are both correct and it's the same duck why can't I combine the two branches into the multiple inheritance lattice I started with?
Just trying to get a better understanding.
The example I normally use for multiple inheritance is a houseboat - inherits from both house and boat (to be distinguished from a boathouse - inherits from house only and contains boats)
Paolo
FWIW, languages like Eiffel - which are specifically designed to handle conceptual to physical modelling/coding do allow mutliple inheritance and handle it with very precise semantics. (See OOSC2 by Bertrand Meyer)