Multiple Inheritance and the Diamond Problem
Java and C# do not allow a class to inherit implementation from multiple classes because it can create ambiguity about which inherited implementation should be used. The classic example is the Diamond Problem: class D inherits from B and C, while both B and C inherit from A. If B and C override the same method, D can have two competing implementations. Restricting class inheritance keeps the type model simpler and encourages interfaces and composition.
The diamond occurs when multiple inheritance creates multiple paths to a common ancestor.
Conflicting implementations can create ambiguity.
State inherited from multiple classes can also create complexity.
Java and C# allow a class to implement multiple interfaces.
Composition is another common way to combine behavior without multiple class inheritance.