Java ha evitato l'ereditarietà multipla qui?

0

Ho appreso che Java non consente l'ereditarietà multipla utilizzando abstract classes per semplicità.

In java, dopo una buona progettazione della gerarchia delle classi, SubType non metterebbe a rischio gli stessi prototipi di metodo o la stessa variabile, provenienti da interface e abstract class come tipi principali, perché abstract class e interface sono scoperti (ma non progettati) in base alle classi di implementazione. Immagino che questo sia il significato.

Ecco il problema del codice Java, che ha ancora problemi di ereditarietà multipli, utilizzando la parola chiave interface :

abstract class SuperType1 {
    protected int item;
}

interface SuperType2{
    final float item=2.0;
}
public class SubType extends SuperType1 implements SuperType2{
    public static void main(String[] args){
        SubType s = new SubType(); 
        //s.item = 2; //Compiler knows that 'item' is only mutable in 'class SuperType1', this code should not fail.
    }
}

Come da programma precedente, cosa significa esattamente dire che Java omette l'ereditarietà multipla?

    
posta overexchange 23.11.2014 - 03:57
fonte

1 risposta

4

Il campo item in SuperType2 class è statico quindi non c'è ereditarietà; c'è solo un riferimento ambiguo. Tutti i campi delle interfacce sono statici e pubblici per impostazione predefinita. Java sarebbe stato progettato meglio se i campi e i metodi statici fossero accessibili solo attraverso il nome della classe e non attraverso un riferimento; ma questo non è un difetto importante.

Dalla versione 8, Java ha il problema dei diamanti e l'ereditarietà multipla perché le interfacce possono avere metodi predefiniti. Nel caso di ereditarietà multipla il codice non verrà compilato a meno che non si sovrascriva il metodo problematico e si specifichi come dovrebbe comportarsi (si può anche scegliere l'implementazione da una supperclass / interfaccia usando la sintassi SuperType.super.method() nell'implementazione della sottoclasse).

    
risposta data 23.11.2014 - 14:52
fonte

Leggi altre domande sui tag