Estou começando no mundo Java e lendo um livro da linguagem, o autor cita como um dos motivos de Java suprimir heranças múltiplas e as substituir por interfaces seria os problemas com superclasses frágeis :
“Os problemas associados às superclasses frágeis (um termo utilizado para descrever uma maneira instável onde múltiplas classes herdadas seriam utilizadas no c++) foram considerados grandes demais”
tentei mas não consegui entender, o que são superclasses frágeis ???
desde já Thanks…
e parabéns pelo site, é muito maneiro.
Não concordo que esse seja o motivo por não existir multipla herança, superclasses frágeis é um problema em c++ que ocorre qdo vc adciona alguma coisa na superclasse, por exemplo um variável membro.
O q acontece é que vc deve então recompilar todos as subclasses. Existem meios de se previnir isso, mas são chatos e difíceis.
No java isso não ocorre porque o interpretador é quem resolve os nomes, o java não guarda referência numérica na compilação.
Tal como disse o C++ usava o mecanismo de herança multipla o que dava bastantes problemas porque cada classe superior iria ter a sua propria implementação podendo originar alguns problemas. No Java isso já não acontece porque cada classe só pode ser derivada de uma outra classe apenas, embora haja a hipotese de implementar quantas interfaces voçê quiser criando uma variante de herança multipla e como não podemos implementar codigo numa interface o problema do C++ desaparece.
Exemplo:
public class B extends A implements C, D, E {
}
Esta classe extende da classe A mas ainda implementa as interfaces C, D e E.
Foi isto que eu percebi do que li até agora, espero que tenha sido esclarecedor.
Segundo o autor Cay Hortsmann: “…herança múltipla torna os compiladores extremamente complexos, como em C++ ou simplesmente ineficientes, como em Eiffel…”;
O fato é que a herança múltipla é complexa de ser compreendida e pode tornar o projeto de classes um caos, onde a hierarquia tem tantas ramificações que poderia deixar qualquer um confuso, tornando o projeto propenso a erros.