Как скрыть статическую переменную в Java?
Это все, что вы можете сделать для переменных: скрыть их. Хотя переменные могут быть унаследованы, они не могут быть переопределены.
Поскольку действительные значения являются специфичными для класса и являются статическими, единственный способ повторно использовать метод в этом сценарии - заставить его принимать параметры:
public class Parent {
static String MY_CONSTANT = "bla bla";
public void printSomething(String something) {
System.out.println(something);
}
//Essentially, Parent.MY_CONSTANT becomes just the default
public void printSomething() {
System.out.println(MY_CONSTANT);
}
}
И ребенок может выбрать, что он отправляет (переопределение в основном заключается в повторном использовании API):
public class Child extends Parent{
static String MY_CONSTANT = "hello world";
@Override
public void printSomething() {
//MY_CONSTANT is hidden and has "hello world"
super.printSomething(MY_CONSTANT);
}
}
Приведенный выше дизайн позволяет вызовам из тестового класса вести себя предсказуемо (или, скорее, интуитивно):
Child hey = new Child();
//Behaves as Child.
hey.printSomething();
РЕДАКТИРОВАТЬ: Поскольку метод получения является методом экземпляра (понятно, поскольку вы полагаетесь на тип экземпляра для чтения правильного значения), вы можете предоставить дочерним элементам поле или метод установки и все виды сокрытие будет полностью подавлено:
public class Parent {
protected String myConstant = "bla bla";
public void printSomething() {
System.out.println(this.myConstant);
}
}
И потомкам просто нужно установить значение в блоке инициализации:
public class Child extends Parent{
public Child() {
myConstant = "hello world";
}
}