Domanda

    

Questa domanda ha già una risposta qui:

         

Qual è la differenza nell'accessibilità delle seguenti variabili in Java?

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

Sono molto interessato a quello che sta facendo l'ultimo.

È stato utile?

Soluzione

  • pubblico: leggibile / scrivibile per chiunque
  • protetto: lettura / scrivibile per istanze di sottoclassi e dall'interno del pacchetto allegato
  • privato: leggibile / scrivibile per qualsiasi istanza della classe e istanza interna o esterna (che racchiude)
  • int c: pacchetto-privato, letto / scrivibile per tutte le classi all'interno dello stesso pacchetto

Vedi JLS per maggiori dettagli

MODIFICA: Aggiunto il commento per la protezione che afferma che l'accesso è garantito dall'interno dello stesso pacchetto, ragazzi avete perfettamente ragione. Aggiunto anche un commento per privati. Ricordo ora ... ;-)

Altri suggerimenti

Ci scusiamo per aver risposto alle correzioni a una risposta precedente ma non ho abbastanza reputazione per modificare direttamente ...

  • pubblico: leggibile / scrivibile per chiunque
  • protetto: lettura / scrittura per sottoclassi di istanze e tutte le classi all'interno dello stesso pacchetto
  • int c: pacchetto-privato, leggibile / scrivibile per tutte le classi all'interno stesso pacchetto
  • privato: lettura / scrittura per qualsiasi membro di quella classe stessa e delle classi interne (se presenti)

È meglio ordinare i modificatori di accesso in questo modo, dall'accesso più ampio (pubblico) al più stretto (privato), sapendo che quando si passa da stretto a ampio, non si perde alcuna possibilità.

Ciò è particolarmente importante per "protetto", dove spesso si comprende che le classi nello stesso pacchetto possono anche accedere ai membri protetti di una classe (non solo le sue sottoclassi).

Cerco di evitare completamente l'accesso a livello di pacchetto (l'ultimo accesso menzionato).

Mi piace mantenere le lezioni indipendenti. Se un'altra classe ha bisogno di accedere a qualcosa nella mia classe, dovrebbe essere pubblica (e dovrebbe con un metodo, non un attributo). Altrimenti sento che hai rotto incapsulamento , come spiegato in Astrazione VS Informazioni che nascondono l'incapsulamento VS .

E tutte queste sono protezioni del tempo di compilazione, possono essere prontamente ignorate attraverso la riflessione in fase di esecuzione.

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