2012-04-12 14 views
7

Questa può sembrare una domanda stupida, ma mi piacerebbe conoscere le "migliori pratiche" quando si creano metodi astratti. La loro visibilità dovrebbe essere pubblica o protetta?Visibilità standard per metodi astratti

Anche se una classe bambino che implementa il metodo astratto sarà pubblica, è comunque consigliabile mantenere il metodo astratto protetto?

risposta

10

Dipende dal caso d'uso. Se il metodo astratto implementa solo una parte di una maggiore funzionalità disponibile da un metodo pubblico nella classe astratta, dovrebbe probabilmente essere protetto. Se è un metodo standalone che può/dovrebbe essere chiamato da un'altra classe, renderlo pubblico.

Esempi:

public abstract class Foo implements Closeable { 
    public final void close() { 
     // do whatever 
     doClose(); 
    } 

    protected abstract void doClose(); 
} 

public abstract class Bar { 
    public void read(byte[] b) { 
     for(int x = 0; x < b.length; x++) { 
      b[x] = read(); 
     } 
    } 

    public abstract int read(); 
} 
1

Suppongo che dipenda da cosa fa il metodo. Se è qualcosa che rappresenta il comportamento della classe (e delle sottoclassi), dovrebbe essere pubblico. Se il metodo da implementare per sottoclassi è interno e utilizzato da altri metodi della classe base (come la definizione di una strategia algoritmica) dovrebbe essere protetto.

2

Ecco la differenza per il pubblico, protetto e privato:

Modifier

Per il metodo se si imposta pubblico si può accedere a tutte le classi all'interno di tutti i pacchetti nel tuo progetto, se lo hai protetto, è possibile accedere a tutte le classi all'interno dello stesso pacchetto o sottoclasse che estendono la classe astratta.

Per la domanda n. 2: Sì, lo è.

+3

Questo non è quello che ha chiesto. Ha chiesto quali erano le migliori pratiche per una classe astratta, non per la definizione di pubblico/privato/protetto. –

+1

Sì, e può decidere cosa vuole scegliere pubblico o protetto in base alla mia spiegazione. – Crazenezz

Problemi correlati