2013-08-20 17 views
10

In realtà la questione è stato chiesto da uno dei intervistatoreCome spiegare l'ereditarietà multipla in Java

Que: Come puoi dire che Java non sta sostenendo l'ereditarietà multipla? Se La classe dell'oggetto è padre di tutte le classi in java.

Non ho una risposta a questa domanda.

Questo significa che le idee chiare sui concetti di Java :-(

Es:.? se A estende B

E qui A è già estendendo classe Object destra ora come le sue opere

?

si prega di condividere le vostre risposte ..

+0

Direttamente è possibile estendere solo una classe o più interfacce. Vedi scala per il work-around :) –

+0

Questa domanda sta diventando troppo ampia. E nessuno qui può insegnarti java, nozioni di base o potenziali anti-schemi. – Leri

+3

L'ereditarietà multipla riguarda l'ereditarietà multipla * diretta *. Una singola classe non può avere due classi parent immediate. Può avere una classe di nonni, però. 'A estende B' e' B estende C', * non * uguale a 'A estende sia B che C'. Il motivo per cui questo non è consentito è per semplicità quando si ha un caso come: "A estende sia B che C'," B estende D', "C estende D' - quando si dice" A a = new A(); a.someAbstractOrVirtualMethodOnD() '- stai parlando dell'implementazione' B' di 'D', o dell'implementazione' C' di 'D'? Quindi, java vieta. –

risposta

11

L'ereditarietà multipla è di circa diretta -inesaurita '.

Una singola classe non può avere due classi parent immediate. Può avere una classe di nonni, però.

A extends B e B extends C, non è la stessa A extends both B and C.

Il motivo che questo non è consentito è per semplicità quando si dispone di un caso come:

A extends both B and C 

B extends D 

C extends D 

se si ha un caso del genere, e poi hai avuto questo codice:

A a = new A(); 
a.someAbstractOrVirtualMethodOnD(); 

... stai parlando dell'implementazione B di someAbstractOrVirtualMethodOnD() o dell'implementazione C dello stesso metodo? Quale dovrebbe essere chiamato? (Suggerimento: non c'è una grande risposta)

Quindi, Java vieta.

Nota: è possibile ottenere qualcosa di simile all'eredità multipla se si dispone di interfacce multiple con interfaccia implement. Ma dal momento che esiste una sola implementazione concreta, non c'è confusione su ciò che viene chiamato.

1

ereditarietà multipla dovrebbe consentire una classe di ereditare più classi genitore. Ma Java non permette questo dato che potrebbe creare Diamond problem

Per quanto riguarda Object classe dell'essere genitore, e poi avere molte classi in gerarchia di ereditarietà, la sua definito come Multi level inheritance

Nota a margine:

C# consente multiple inheritance by interface consentendo al bambino di implementare la metrica di più genitore ods separatamente anche se hanno la stessa firma

7

Più ereditarietà significa che una singola classe può ereditare da più classi. In altro modo, può avere più classi genitore.

Ad esempio Object classe citato dall'intervistatore, ci sono due possibilità:

  1. L'intervistatore stesso è confuso circa classe multipla genitore (ereditarietà multipla) e la classe del bambino multipla.

  2. O che sta cercando di ingannare l'utente utilizzando questa domanda

una classe genitore può avere molte classi figlie e che non riguarda l'ereditarietà multipla.

+0

Grazie per la risposta. Per favore controlla la domanda che ho modificato con l'esempio. –

3

L'unica la somiglianza dell'ereditarietà mutiple in java è Interfaces. Una classe può implementare più interfacce.

Object classe non è un esempio di ereditarietà multipla. Potrebbe essere interpretata male la domanda.

8

Sulla cima di tutto per mantenere il design semplice linguaggio

E l'esempio dal blog seguo regolarmente.

enter image description here

1) Abbiamo due classi B e C eredita da A.

2) Si supponga che B e C hanno la precedenza un metodo ereditato e forniscono una propria implementazione.

3) Ora D eredita da entrambi B e C facendo l'ereditarietà multipla. D dovrebbe ereditare quel metodo sottoposto a override, che verrà utilizzato il metodo sottoposto a override? Sarà da B o C?

Qui abbiamo un'ambiguità.

Eventuali modi per superare questo abbiamo interfacce e eredità multilivello.

Edit:

And here A is already extending Object class. 

che non viene mai chiamato come Multiple inheritance .che si chiama Multi level inheritance.

Nel livello di Multi,

Molte classi sono coinvolti in inheritance, ma una sola classe one estende. Il più basso subclass può fare uso di tutti i suoi contenuti super classes '.

+1

Grazie .. Suresh +1 –

+0

Sono contento, Mi ha aiutato. Prego :) –

1

Una classe java può essere solo figlia diretta di una classe monoparentale. Può avere un nonno ma non un secondo genitore. È come avere una madre biologica. Non puoi avere più di una madre biologica, certo che puoi avere una nonna.

1

Ci sia una classe A e classe B. Ora definiamo una classe derivata. Ereditarietà multiple: la classe derivata può ereditare sia la classe A che la classe B. Ma ciò non è possibile in Java. Quindi non supporta l'ereditarietà multipla.

2

La risposta è Java supporta l'ereditarietà multi-livello ma non l'ereditarietà multipla.

3

Questo è un malinteso comune con Java.

Il modo in cui funziona l'ereditarietà multipla (in C++ e Python) è qualcosa di simile.

Parent1 Parent2 Parent3 
    |   |   | 
    _______________________ 
       | 
       v 
      Child 

significa che Child erediterà gli attributi e metodi di tutti i genitori.

Tuttavia, in Java, l'ereditarietà funziona in questo modo.

Object 
    | 
    v 
    Child1 
    | 
    v 
    Grandchild 

Quindi, oggetto è la superclasse di tutte le classi, ma non è il padre immediato di tutte le classi. Java, tuttavia fornisce un modo per implementare un po 'ereditarietà multipla per la via del Interfaces

Object 
    | 
    v 
Child <--- Interface 
    | 
    v 
Grandchild 

Ora, Grandchild erediterà i metodi da Child, che, a sua volta è obbligato a implementare i metodi definiti nell'interfaccia [meno che non sia una classe astratta, ma che è discorso a parte tutto]

quindi, Object è l'antenato di tutte le classi, ma non è la madre di tutte le classi, e Java, quindi, non supporta l'ereditarietà multipla.

1

Que: Come puoi dire che java non supporta l'ereditarietà multipla? Se la classe Object è un genitore di tutte le classi in java.

L'oggetto è l'antenato di tutte le classi (padre, nonno, bisnonno, ecc.) Ma ogni classe ha un solo padre (se non specificato, è la classe Oggetto).

0

Primo caso: supponga di creare una classe A senza usare l'ereditarietà. Per impostazione predefinita, è derivato dalla classe Object.

Secondo caso: Si supponga di creare la classe B che si estende di classe A. Classe A contiene tutti i campi dalla classe Object, quindi la classe B sarà anche li conterrà attraverso l'ereditarietà. È class B extends A(which extends Object), quindi si potrebbe dire che B è una sottoclasse per A e anche per Oggetto.