Pergunta

Java não está permitindo que a herança de várias classes (ainda permite herança de múltiplas interfaces.), Eu sei que está muito em linha com o clássico problema de diamante. Mas as minhas perguntas é porque java não está permitindo que a herança múltipla como C ++ quando não há ambigüidade (e, portanto, há chances de problema de diamantes), enquanto herança de classe base múltipla?

Outras dicas

Eu li que a maioria dos programadores não usar herança múltipla em um bom caminho. "Basta ir em frente e herdar de uma classe apenas para reutilização de código" não é a melhor prática em caso de herança múltipla.

Muitos programadores não sei quando usar herança simples, na maioria dos casos. herança múltipla deve ser usado com cuidado e somente se você sabe o que está fazendo, se você quiser ter um bom design.

Eu não acho que a falta de herança múltipla em Java (como em C ++) vai colocar restrições em seu / mapeamento de código de design do aplicativo / problema de domínio em classes.

se o suporte a java herança múltipla, então ele pode afetar outras funções do java
Método considerar super (), que é usado para chamar programa de classe super constructor.if tem super classe múltipla (por causa da herança múltipla), então compilador irá ficar confuso sobre qual construtor classe super deve ser chamado e lançar um erro

Simplicidade. Para citar Tom Sintes ,

A esforçou equipe de projeto Java para fazer Java:

  • simples, orientada a objeto, e familiar
  • robusta e segura
  • Arquitetura neutra e portátil
  • desempenho Alta
  • interpretada, rosca, e dinâmica

As razões para omitir herança múltipla a partir da linguagem Java principalmente decorrem da "simples, orientada a objetos e familiar" objetivo. Como uma linguagem simples, os criadores do Java queria uma linguagem que a maioria desenvolvedores poderiam entender sem treinamento extensivo. Para o efeito, trabalharam para tornar a linguagem como semelhante a C ++ quanto possível (familiar) sem levar mais de uma complexidade desnecessária 's C ++ (simples).

Na opinião dos designers, herança múltipla causa mais problemas e confusão do que resolve. Então eles cortaram herança múltipla de a linguagem (assim como eles cortaram a sobrecarga de operador). Os designers' experiência extensa C ++ lhes ensinou que a herança múltipla apenas não valia a pena a dor de cabeça.

designers de Java decidiu que. herança múltipla pode ser simulada pelo uso de interfaces.

Uma resposta simples é que todas as classes em Java derivam java.lang.Object IIRC. Então, você faria sempre tem um problema de diamante ... :-D

É verdade que Java não usar para apoiar a herança múltipla de execução (apenas do tipo ou seja, interface). Essa foi uma decisão de projeto.

No entanto, desde Java 8, suporta herança múltipla usando métodos padrão. Consulte http://docs.oracle.com/javase/tutorial/java/ IandI / multipleinheritance.html :

herança múltipla de implementação é a capacidade de herdar definições de métodos de várias classes. Os problemas surgem com este tipo de herança múltipla, tais como conflitos e ambiguidades nome. ... métodos padrão introduzir uma forma de herança múltipla de implementação.

O problema diamante surge quando várias classes pai definir suas próprias implementações de algo e a classe filha dos dois tem de lidar com a ambiguidade da qual implementação de usar. Assim que se todas as classes em Java derivam de Object, que é uma única classe pai. "Single pai, várias classes derivadas" não é o mesmo que "Vários pais, classe derivada único"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top