Статический означает, что есть один на класс, а не один на объект. Это верно как для методов, так и для переменных.
Статическое поле подразумевает, что существует одно такое поле, независимо от того, сколько объектов этого класса создано. Пожалуйста, посмотрите на Есть ли способ переопределить переменные класса в Java? для вопроса о переопределении статического поля. Вкратце: статическое поле не может быть переопределено.
Учтите это:
public class Parent {
static int key = 3;
public void getKey() {
System.out.println("I am in " + this.getClass() + " and my key is " + key);
}
}
public class Child extends Parent {
static int key = 33;
public static void main(String[] args) {
Parent x = new Parent();
x.getKey();
Child y = new Child();
y.getKey();
Parent z = new Child();
z.getKey();
}
}
I am in class tools.Parent and my key is 3
I am in class tools.Child and my key is 3
I am in class tools.Child and my key is 3
Ключ никогда не возвращается как 33. Однако, если вы переопределите getKey и добавите его в Child, результаты будут другими.
@Override public void getKey() {
System.out.println("I am in " + this.getClass() + " and my key is " + key);
}
I am in class tools.Parent and my key is 3
I am in class tools.Child and my key is 33
I am in class tools.Child and my key is 33
Переопределив метод getKey, вы можете получить доступ к статическому ключу Child.