Herança múltipla em java
-
12-09-2019 - |
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 ??li>
- 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"