2016-04-29 10 views
5

Mi sono imbattuto in questo argomento durante la lettura dell'interfaccia in Java 8, ci sono scenari in cui definiamo il metodo nell'interfaccia usando la parola chiave default o statica, consentendo al prossimo bambino di ridefinire lo stesso metodo o implementarlo. Questo significa ereditarietà multipla? C'è un altro problema che ho trovato è che, il tipo restituito deve essere di tipo co-variante, altrimenti il ​​problema di compilazione, il che significa che non supporta ancora l'ereditarietà multipla? Possiamo dire che java supporta l'ereditarietà multipla? Fammi sapere maggiori dettagli in merito a questo argomento.Java 8 supporta l'ereditarietà multipla?

+2

@Draken Non credo che altra domanda è veramente risponde alla sua domanda - come quella questione non sta parlando di Java 8 e implementazioni di default all'interno di interfacce a tutti. – GhostCat

+0

La confusione sta nell'uso dell'ereditarietà delle parole, l'ereditarietà tecnicamente dovrebbe essere usata solo per estendere le classi, non per le interfacce. Quindi non possiamo fare ereditarietà multiple, ma possiamo fare più implementazioni. Sento che leggere ulteriormente sull'argomento mi aiuterà molto di più – Draken

+0

Sì, hai ragione @ Jägermeister –

risposta

5

Ciò significa più ereditarietà?

Per interfacce, sì, ma non classi. Di solito sono le classi a pensare come solo le classi possono avere campi e costruttori. Non è diverso da Java 1.0

il tipo di ritorno deve essere di tipo co-variante, altrimenti il ​​problema di compilazione, il che significa che non supporta ancora l'ereditarietà multipla?

La necessità del tipo di reso covariante non è correlata al fatto che si disponga o meno dell'ereditarietà.

Possiamo dire che java supporta l'ereditarietà multipla?

Per interfacce, sì.

+0

Se stiamo scrivendo 2 diverse interfacce con lo stesso metodo predefinito ma con un tipo di restituzione diverso, Java si aspetta che il tipo restituito sia di tipo co-variante nella classe di implementazione. Senza il tipo di co-variante, Java genera l'errore del compilatore. Ma per supportare l'ereditarietà multipla, il tipo restituito potrebbe essere diverso. Possiamo utilizzare il metodo statico per rendere il nostro supporto Java più ereditarietà. C'è ancora un problema, in realtà dobbiamo aggiungere l'interfaccia Parent per usare i suoi metodi statici ... –

+1

@ShaikhNizamuddin se avete due metodi che restituiscono tipi incompatibili, potrebbe essere difficile per lo sviluppatore dare ai metodi lo stesso nome. Suggerirei di dare nomi diversi, quindi è chiaro per lo sviluppatore che lo utilizza quale risultato dovrebbero aspettarsi. –

+0

Sì, è bello usare nomi diversi per i metodi che hanno un tipo di ritorno diverso. Forse nelle prossime versioni di Java (un po 'di ipotesi, essendo ottimista) possiamo vedere questo tipo di co-variante non ambigua. :) –

-2

interfaccia ,, Interface..all il modo .. Grazie

+0

Ancora ci sarà un'ambiguità nel caso il tipo restituito non corrisponde, per supportare l'ereditarietà multipla, Java richiede che il tipo restituito sia di tipo co-variante.Ma l'utente è libero di scegliere il proprio tipo di reso ... –