22

I have two classes that extend the same abstract class. They both need the same constant, but with different values. How can I do this? Some example code to show what I want to do.

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
}

The above code does not compile because CONST is not initialized int class A. How can I make it work? The value of CONST should be 1 for all instances of B, and 2 for all instances of C, and 1 or 2 for all instances of A. Is there any way to use statics for this?

Fractaly
  • 834
  • 2
  • 10
  • 25

2 Answers2

25

You can't do that.

You can do this, however:

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());
}
mre
  • 43,520
  • 33
  • 120
  • 170
Oliver Charlesworth
  • 267,707
  • 33
  • 569
  • 680
6

If a constant has a variable value, it's not a constant anymore. Static fields and methods are not polymorphic. You need to use a public method to do what you want.

JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255