Access Modifiers, Overriding and Hiding
Generally, a derived class cannot override a base method with a more restrictive access level because that would violate substitutability. For example, a public base method cannot normally become protected or private in an override. Languages have specific rules around increasing visibility, method hiding and overriding. Hiding creates a new member in the derived class rather than participating in runtime polymorphism, so it should be used deliberately and not as a substitute for proper overriding.
An override normally preserves the accessibility contract of the base method.
Reducing visibility would prevent valid base-type usage.
Overriding participates in polymorphic dispatch.
Hiding/shadowing creates a separate member in the derived type.
Exact access-modifier rules vary between languages.