В Java мы не можем переопределять методы private, static и final, объявленные в родительском классе, в дочерних классах. Для методов private и final компилятор выдаст ошибки. Но в случае статических методов компилятор позволяет создавать методы с тем же именем и аргументами.
Объявление одинаковых статических методов в родительских и дочерних классах называется сокрытием метода. Для нестатических методов это известно как переопределение метода.
1. Понимание метода сокрытия на примере
В следующем коде мы создали два класса Parent и Child. Оба класса определяют статический метод display(). Этот код успешно выполняется без каких-либо предупреждений или ошибок.
class Parent {static void display() {System.out.println("Super");}}class Child extends Parent {static void display() {System.out.println("Sub");}}
На первый взгляд, похоже, что Child переопределил метод display() из класса Parent. Если это правда, то следующая программа должна вывести «Sub» в соответствии с правилами переопределения методов.
Parent instance = new Child();instance.display(); //Prints Super
2. Можно ли переопределить статические методы, объявив нестатические методы в дочернем классе?
Нет, мы не можем удалить ключевое слово static из объявления метода в дочернем классе. Компилятор выдаст ошибку при такой попытке.
В предыдущем примере, если мы удалим ключевое слово static из метода display() в Child, компилятор сообщит, что мы не можем переопределить статический метод из Parent.

3. Заключение
В Java переопределение методов допустимо только тогда, когда мы говорим в терминах методов экземпляра. Как только мы начинаем говорить в терминах статических методов, следует использовать термин скрытие методов, поскольку статические методы принадлежат объекту класса.
К счастью, приведенные выше термины встречаются в большей части литературы по Java(даже в Спецификации языка Java ).