Access Modifiers and Method Overriding
Access modifiers are part of the substitutability contract of an overridable method. An overriding method generally cannot reduce the visibility of the base method because code using the base type must retain the access guaranteed by that base contract. For example, a public method cannot normally be overridden as protected or private. In Java, an override can maintain or increase visibility, while C# requires the override to use compatible accessibility with the virtual/abstract base member.
An override must respect the accessibility contract of the base method.
Reducing visibility would break callers using the base type.
Java generally permits increasing visibility when overriding.
C# override accessibility must match the overridden member's accessibility constraints.
Hiding a member is different from overriding it and follows different rules.