As shown in http://docs.oracle.com/javase/tutorial/java/IandI/override.html, Java does allow
Simple answer: that would be the mess.
Concrete answer: what to call in that case Derived.foo()? Base.foo() can't be called as it's hidden (as per you), Derived.foo() can't be called as it's not static.
Derived.foo()
Base.foo()