2012-05-03 21 views
5

Tengo una clase abstracta y 2 subclases. Hay 4 constantes que se relacionan con todas las clases. Iba a colocar las finales en la clase abstracta pero entiendo que una variable final no es heredada? ¿Tendría que definir la constante en cada clase (parece ineficaz)? O simplemente haz que la constante sea una variable instantánea (¿no suena como una buena idea)?Java- Uso de una constante en una clase abstracta que también debe ser utilizada por subclases

¿De qué maneras puedo hacer esto?

Respuesta

10

Lo siguiente estaría disponible para todas sus subclases si está definido en la clase abstracta.

public static final Integer MYCONSTANT = 42; 

o

static final Integer MYCONSTANT = 42; 

o

protected static final Integer MYCONSTANT = 42; 

El segundo (paquete-privada) sólo está disponible para las clases dentro del mismo paquete. El tercero (protegido) estaría disponible para todas las subclases independientemente de su paquete.

+0

No lo he intentado pero estoy seguro de que el segundo solo se cumple si la clase hija está en el mismo paquete. –

+0

@AngeloNeuschitzer Sí, eso es correcto. – Martin

+1

Entonces deberías escribirlo de esa manera, el OP parece ser un principiante y podría confundirse. –

2

Las constantes son heredadas por los niños. Solo tiene que asegurarse de tenerlos protected o public para que los niños puedan acceder a ellos.

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

se puede acceder desde la clase y todos sus hijos.

+1

De lo que me han dicho usando protected es programación "floja" y no debería usarse. – spaz

+2

@spaz: aquí hablamos de visibilidad de las constantes, esto no es realmente herencia. También podría crear una clase 'Constantes', hasta ahora lo he visto en todos mis proyectos. Por cierto: llamar "holgazana" a la visibilidad "protegida" es cuestionable ... todo depende de tus necesidades. – home

+0

@spaz que depende del contexto. para una variable 'final' que será accesible por su propia clase y sus hijos es la manera perfecta de hacer las cosas. Entonces ... de verdad ... ¿por qué debería ser un poco la programación "floja"? ¿Y qué debería usarse en su lugar? –

0

Sí lo son. Pero como son constantes debe ser final and static, static modifier hacer que haya solo una 'copia' y si esto se usará solo en la subclase solo entonces puede usar protected o si de otras clases también debe hacerlo public.

Cuestiones relacionadas