Domanda

Java non sta permettendo eredità da più classi (ancora permette eredità di interfacce multiple.), So che è molto in linea con il classico problema di diamante. Ma la mia domanda è perché Java non permette l'ereditarietà multipla come il C ++, quando non c'è ambiguità (e quindi nessuna possibilità di problemi di diamante), mentre eredita dalla classe base multipla?

Altri suggerimenti

Ho letto che la maggior parte dei programmatori non usano l'ereditarietà multipla in modo corretto. "Basta andare avanti e ereditare da una classe solo per riutilizzare il codice" non è la migliore pratica in caso di ereditarietà multipla.

Molti programmatori non sanno quando usare semplice eredità in maggior parte dei casi. L'ereditarietà multipla deve essere usato con cautela e solo se si sa cosa si sta facendo, se si vuole avere un buon design.

Non credo che la mancanza di ereditarietà multipla in Java (come in C ++) metterà restrizioni la mappatura del dominio disegno / problema di codice / applicazione in classi.

se il supporto java ereditarietà multipla allora può effettuare altre caratteristiche di java
considerare super () il metodo che viene utilizzato per chiamare super-programma di classe constructor.if ha più classe di super (a causa di ereditarietà multipla) allora compilatore otterrà confusi su quale costruttore di super-classe dovrebbe essere chiamato e genera un errore

La semplicità. Per citare Tom Sintes ,

  

Il team di progettazione di Java è sforzato di rendere Java:

     
      
  • Semplice, orientato agli oggetti, e familiare
  •   
  • robusto e sicuro
  •   
  • Architettura neutro e portatile
  •   
  • alte prestazioni
  •   
  • Interpretata, filettato, e dinamica
  •   
     

I motivi per omettere l'ereditarietà multipla dal linguaggio Java   in gran parte derivano dal "semplice, orientato agli oggetti, e familiare" obiettivo. Come   un linguaggio semplice, i creatori di Java ha voluto una lingua che la maggior parte   Gli sviluppatori possono cogliere, senza una formazione completa. A tal fine, essi   lavorato per rendere il linguaggio più simile a C ++ possibile (familiare)   senza riporto inutili complessità C ++ s '(semplice).

     

A parere dei progettisti, l'ereditarietà multipla provoca più problemi   e confusione che si risolve. Così hanno tagliato l'ereditarietà multipla da   la lingua (proprio come hanno tagliato l'overloading degli operatori). I progettisti   una vasta esperienza C ++ ha insegnato loro che l'ereditarietà multipla solo   non valeva la pena il mal di testa.

i progettisti di Java hanno deciso che. L'ereditarietà multipla può essere simulato mediante l'uso di interfacce.

Una risposta più semplice è che tutte le classi in Java derivano da java.lang.Object IIRC. Quindi, si farebbe sempre hanno un problema di diamante ... :-D

E 'vero che Java non ha utilizzato per supportare l'ereditarietà multipla di attuazione (solo di tipo di interfaccia vale a dire). E 'stata una decisione di progettazione.

Tuttavia, dal momento che Java 8, supporta l'ereditarietà multipla usando metodi predefiniti. Vedere http://docs.oracle.com/javase/tutorial/java/ IandI / multipleinheritance.html :

  

L'ereditarietà multipla di implementazione è la capacità di ereditare   definizioni dei metodi di più classi. I problemi sorgono con questo   tipo di ereditarietà multipla, come i conflitti di nome e ambiguità.   ... metodi predefiniti introducono una forma di ereditarietà multipla di   implementazione.

Il problema si pone quando il diamante più classi genitore definire i propri implementazioni di qualcosa e la classe figlia di questi due deve fare i conti con l'ambiguità di cui implementazione da usare. Che importa se tutte le classi in Java derivano da Object, che è una singola classe genitore. "Genitore singolo, più classi derivate" non è lo stesso di "genitori multipli, singola classe derivata"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top