Example:

```
class Parent {
    public void func(){
        System.err.println("parnet");
    }
}

class Child extends Parent {
    @Override
    protected void func(){
        System.err.println("child");
    }
}

```

is illegal but if we switch the visibility it is legal. What's the reason why it is designed this way? I can't make much sense out of it.