2012-05-03 17 views
5

Ho una classe astratta e 2 sottoclassi. Ci sono 4 costanti che riguardano tutte le classi. Stavo per piazzare le finali nella classe astratta ma capisco che una variabile finale non è ereditata? Dovrei definire la costante in ogni classe (sembra inefficiente)? O semplicemente rendere la costante una variabile istantanea (non sembra una buona idea)?Java: utilizzo di una costante in una classe astratta che deve essere utilizzata anche da sottoclassi

Quali sono i modi in cui posso fare questo?

risposta

10

Quanto segue sarebbe disponibile per tutte le sottoclassi se definito nella classe astratta.

public static final Integer MYCONSTANT = 42; 

o

static final Integer MYCONSTANT = 42; 

o

protected static final Integer MYCONSTANT = 42; 

Il secondo (pacchetto-privato) è disponibile soltanto per classi all'interno dello stesso pacchetto. Il terzo (protetto) sarebbe disponibile per tutte le sottoclassi, indipendentemente dal loro pacchetto.

+0

Non ho provato, ma sono certo che il secondo vale solo se la classe figlio si trova nello stesso pacchetto. –

+0

@AngeloNeuschitzer Sì, è corretto. – Martin

+1

Quindi dovresti scriverlo in questo modo, l'OP sembra essere un principiante e potrebbe essere confuso. –

2

Le costanti vengono ereditate dai bambini. Devi solo assicurarti di averli protected o public in modo che i bambini possano accedervi.

abstract class A { 
    protected final static String FOO = "bar"; 
} 
class B extends A { 
    somemethod() { 
     System.out.println("foo: " + FOO); 
    } 
} 

accessibile dalla classe e da tutti i suoi bambini.

+1

Da quello che mi è stato detto usando protetto è la programmazione "pigra" e non dovrebbe essere usato. – spaz

+2

@spaz: qui parliamo della visibilità delle costanti - questa non è veramente un'eredità. Potresti anche creare una classe 'Constants', finora l'ho vista in tutti i miei progetti. Btw: chiamare la visibilità "protetta" "pigra" è discutibile ... tutto dipende dalle vostre esigenze. – home

+0

@spaz che dipende dal contesto. per una variabile 'finale' che deve essere accessibile dalla propria classe e dai suoi figli è il modo perfetto di fare cose. Quindi ... per davvero ... perché dovrebbe essere una programmazione "pigra", comunque? E cosa dovrebbe invece essere usato? –

0

Sì, lo sono. Ma siccome sono costanti dovrebbe essere final and static, static modifier fare in modo che ci sia solo una 'copia' e se questo verrà usato solo in sottoclasse solo allora puoi usare protected o se anche da altre Classi lo devi fare public.

Problemi correlati