Чтобы увидеть разницу, вы должны использовать более мощный пример:
class Super {
public static void hidden(Super superObject) {
System.out.println("Super-hidden");
superObject.overriden();
}
public void overriden() {
System.out.println("Super-overriden");
}
}
class Sub extends Super {
public static void hidden(Super superObject) {
System.out.println("Sub-hidden");
superObject.overriden();
}
public void overriden() {
System.out.println("Sub-overriden");
}
}
public class Test {
public static void main(String[] args) {
Super superObject = new Sub();
superObject.hidden(superObject);
}
}
Поскольку Самит Г. уже написал статические методы с одинаковой сигнатурой как в базовом, так и в производном классах, то это скрывает реализацию, и это не переопределение. Вы можете немного поиграть с примером, изменив один или другой из статических методов на нестатический или изменив их оба на нестатический, чтобы увидеть, какие ошибки компиляции выдает java-компилятор.