It's not permitted to override and reduce visibility of inherited methods, but the point is you can't override a static method anyway:
If a subclass defines a static method with the same signature as a static method in the superclass, then the method in the subclass hides the one in the superclass.
So why is the second hide ok while the first one is not?
public class Base {
public static void foo(){
System.out.println("Base");
}
}
hide1:
public class Sub extends Base {
static void foo(){ //cannot reduce visibility error!
System.out.println("Sub");
}
}
hide2:
public class Sub extends Base {
public static void foo(){ //OK
System.out.println("Sub");
}
}