When a class declares a static method m, the declaration of m hides any method m', where the signature of m is a subsignature of the signature of m' and the declaration of m' is both in the superclasses and superinterfaces of the declaring class and also would otherwise be accessible to code in the declaring class (Java Language Specification, §8.4.8.2 "Hiding (by Class Methods)"[JLS 2005]).
An instance method defined in a subclass overrides another instance method in the superclass when both have the same name, number and type of parameters, and return type.
...
The methods inherited from the superclass can also be overloaded in a subclass. Overloaded methods are new methods unique to the subclass and neither hide nor override the superclass method [Tutorials 2008].
Technically, a private method cannot be hidden or overridden. There is no requirement that private methods with the same signature in the subclass and the superclass bear any relationship in terms of having the same return type or throws
clause, the necessary conditions for hiding [JLS 2005]. Consequently, hiding cannot occur when private methods have different return types or throws
clauses.
...
Automated detection of violations of this rule is straightforward. Automated determination of cases where method hiding is unavoidable is infeasible. However, determining whether all invocations of hiding or hidden methods explicitly indicate which specific method is invoked is straightforward.
Bibliography
Puzzle 48. All I get is static | |
[JLS 2005] | |
...