Perché Java non supporta l'ereditarietà privata / protetta come C ++? [chiuso]

11

Mentre erediti una classe in C ++, l'utente può specificare lo specificatore di accesso come,

class Base
{
    public int mem1;
    protected in mem2;
};

class Derived1 : **private** Base
{
    // mem1 will be private here.
    // mem2 will be private here.
};

class Derived2 : **protected** Base
{
    // mem1 will be protected here.
    // mem2 will be protected here.
};

class Derived2 : **public** Base
{
    // mem1 will be public here.
    // mem2 will be protected here.
};

Ma lo stesso non è possibile in Java, cioè l'estensione in java è sempre come l'ereditarietà "pubblica" in C ++.

Qualcuno potrebbe spiegarne il motivo?

    
posta Rumit Parakhiya 17.03.2013 - 17:26
fonte

2 risposte

10

La maggior parte dei benefici che l'ereditarietà privata / protetta ti dà può essere facilmente raggiunta tramite l'incapsulamento. Thomas Eding ha fornito alcuni buoni esempi di casi che potrebbero essere semplificati con l'aggiunta dell'eredità privata / protetta, e mentre questi sono casi validi, esistono soluzioni alternative che non richiedono ereditarietà privata / protetta e sono più "idiomatici" (almeno in Java).

Gli sviluppatori del linguaggio Java evidentemente pensavano che il costo in complessità necessario per supportare l'ereditarietà privata / protetta (inclusa l'ereditarietà multipla) superasse il vantaggio che avrebbe fornito.

    
risposta data 17.03.2013 - 17:50
fonte
8

Poiché Java non ha ereditarietà multipla e tutto deve essere (pubblicamente) ereditato da Object , non ci sono posizioni in Java in cui l'ereditarietà privata o protetta produrrebbe un programma valido.

    
risposta data 17.03.2013 - 20:02
fonte

Leggi altre domande sui tag