Overriding constants in Java

If you are like me then you really want to minimize duplication of code and reuse as much as possible. A common use case that has caused me trouble is this scenario where I have a common function that uses some context (in the form of constants). For a particular subclass I just need to redefine the constant to make everything behave like I want. Something like this:

public class Base {
protected final static String letter = “-“;
protected void print1(){
System.out.println(“Letter=” + letter);
}
}
public class A extends Base {
protected static String letter = “A”;
}
And called like this:
A a = new A();
a.print1();

I had expected to see “A” as the output from above – but no, it is “-“…

Basically, what happens is that you define a new variable in a different scope – instead of overriding the existing constant/variable… And when you think about it I suppose it is quite natural. But then how can one get around this – and keep the basic idea of what I was trying to obtain? Well, you simple use a getter – and override that. So if you do this instead:

public class Base {
protected final static String letter = “-“;
protected String getLetter(){
return letter;
}
protected void print2(){
System.out.println(“Letter=” + getLetter());
}
}public class A extends Base {
protected static String letter = “A”;
protected String getLetter(){
return letter;
}
}And called like this:
A a = new A();
a.print2();

… then you get the expected “A” from the method defined in the Base class but called in the subclass A.

Perhaps very simple – but it took me a little effort to understand that I could not just override the constant/variable and had to change the approach slightly.

Happy coding!!

Sorry, comments are closed for this post.