[RESOLVIDO] Heranças Java

Alguem pode me explicar pq Java e php nao suportam herança multipla?
google nao diz :S

Porque não é uma boa prática!
mais?
pegunta pros desenvolvedores das linguagens!

vlw

Por que o Java e o PHP deveriam ter herança múltipla?

A herança múltipla torna-se um problema quando um filho tem dois pais, e esses dois pais tem dois método não relacionados, mas com o mesmo nome. Aí, qual dos métodos o filho deveria implementar?

Existe no C++ um problema chamado Diamante da Morte. Considere uma herança em que uma classe A tenha 2 filhos, B e C. E uma classe D seja filho ao mesmo tempo de B e C. A classe D enxerga ambiguidade em todos os métodos vindos de A, já que ela implementa o A que vem de B e o A que vem de C.

Herança multipla pode ser prática as vezes, quando usamos um conceito conhecido como mixin classes. Há também classes para implementar recursos especiais, simples, que podem se beneficiar da herança múltipla. Mas como existem mais exceções do que regras pros casos onde ela pode ser útil, e dezenas de situações onde ela pode ser confusa, os projetistas do Java e do PHP resolveram remove-la.

Entretanto, o Java implementa o conceito de interfaces. Interface é uma classe que não tem implementação ou atributos. Ou seja, ela representa um contrato, uma coisa que a classe precisa fazer. A vantagem é que os compiladores podem ter certeza de que com interfaces, nunca há ambiguidade, já que a interface por si só não tem comportamento. Por isso uma classe pode implementar diversas interfaces. Esse conceito é usado em C++ também, através de classes conhecidas como ABCs (classes com apenas métodos virtuais puros e um destrutor virtual vazio). As ABCs são uma implementação manual do conceito de interfaces, mas sem a garantia de que nunca haverá métodos implementados por lá (exceto, claro, por um acordo de cavalheiros de seguir boas práticas).

Mais especificamente, Java não suporta herança múltipla de implementação, pois herança múltipla de interface é perfeitamente possível. A herança múltipla de implementação não é permitida em razão de um caso específico: quando uma classe D herda de duas classes B e C que por sua vez herdam de uma classe A. Esse caso é o chamado losango da morte (é a forma que você obtém se desenhar a hierarquia) pois introduz uma série de ambiguidades dificeis de tratar. Em razão disso, é mais fácil restringir a herança múltipla de implementação, além de incentivar a boa prática de favorecer a composição.