Java Reference
In-Depth Information
classes and superinterfaces of the class that would otherwise be accessible to code in the
class.
It is a compile-time error if a
static
method hides an instance method.
In this respect, hiding of methods differs from hiding of fields (§
8.3
), for it is per-
missible for a
static
variable to hide an instance variable. Hiding is also distinct from
A hidden method can be accessed by using a qualified name or by using a method invoca-
In this respect, hiding of methods is similar to hiding of fields.
Example 8.4.8.2-1. Invocation of Hidden Class Methods
A class (
static
) method that is hidden can be invoked by using a reference whose type
is the class that actually contains the declaration of the method. In this respect, hiding
of
static
methods is different from overriding of instance methods. The example:
class Super {
static String greeting() { return "Goodnight"; }
String name() { return "Richard"; }
}
class Sub extends Super {
static String greeting() { return "Hello"; }
String name() { return "Dick"; }
}
class Test {
public static void main(String[] args) {
Super s = new Sub();
System.out.println(s.greeting() + ", " + s.name());
}
}
produces the output:
Goodnight, Dick
because the invocation of
greeting
uses the type of
s
, namely
Super
, to figure out, at
compile time, which class method to invoke, whereas the invocation of
name
uses the
class of
s
, namely
Sub
, to figure out, at run time, which instance method to invoke.