2011-12-11 12 views
18

Tengo dos clases que extienden la misma clase abstracta. Ambos necesitan la misma constante, pero con diferentes valores. ¿Cómo puedo hacer esto? Un código de ejemplo para mostrar lo que quiero hacer.Anulando constantes en Java

abstract class A { 
    public static int CONST; 
} 

public class B extends A { 
    public static int CONST = 1; 
} 

public class C extends A { 
    public static int CONST = 2; 
} 

public static void main(String[] args){ 
    A a = new B(); 
    System.out.println(a.CONST); // should print 1 
} 

El código anterior no se compila porque CONST no se inicializa en la clase A. ¿Cómo puedo hacer que funcione? El valor de CONST debe ser 1 para todas las instancias de B, y 2 para todas las instancias de C, y 1 o 2 para todas las instancias de A. ¿Hay alguna forma de usar estadísticas para esto?

Respuesta

21

No puede hacer eso.

Usted puede hacer esto, sin embargo:

abstract class A { 
    public abstract int getConst(); 
} 

public class B extends A { 
    @Override 
    public int getConst() { return 1; } 
} 

public class C extends A { 
    @Override 
    public int getConst() { return 2; } 
} 

public static void main(String[] args){ 
    A a = new B(); 
    System.out.println(a.getConst()); 
} 
+0

¡Gracias! Solo desearía poder usar estática, porque los valores no difieren de una instancia de B a otra. – Fractaly

+0

@Fractaly: Pero varían de instancia de 'A' a otro. –

+1

no debería getConst() en A ser abstracto? – Fractaly

5

Si una constante tiene un valor variable, no es una constante más. Los campos y métodos estáticos no son polimórficos. Necesitas usar un método público para hacer lo que quieras.