The members of a class type (§8.2) are fields and methods. The members of a class type are all of the following:
Object
has no direct superclass)
Constructors (§8.6) are not members.
There is no restriction against a field and a method of a class type having the same simple name.
A class may have two or more fields with the same simple name if they are declared in different interfaces and inherited. An attempt to refer to any of the fields by its simple name results in a compile-time error (§6.5.6.2, §8.2).
interface Colors { int WHITE = 0, BLACK = 1; } interface Separates { int CYAN = 0, MAGENTA = 1, YELLOW = 2, BLACK = 3; } class Test implements Colors, Separates { public static void main(String[] args) { System.out.println(BLACK); // compile-time error: ambiguous } }
the name BLACK
in the method main
is ambiguous, because class Test
has two
members named BLACK
, one inherited from Colors
and one from Separates
.
A class type may have two or more methods with the same simple name if the methods have different signatures (§8.4.2), that is, if they have different numbers of parameters or different parameter types in at least one parameter position. Such a method member name is said to be overloaded.
A class type may contain a declaration for a method with the same name and the same signature as a method that would otherwise be inherited from a superclass or superinterface. In this case, the method of the superclass or superinterface is not inherited. If the method not inherited is abstract
, then the new declaration is said to implement it; if the method not inherited is not abstract
, then the new declaration is said to override it.
class Point { float x, y; void move(int dx, int dy) { x += dx; y += dy; } void move(float dx, float dy) { x += dx; y += dy; } public String toString() { return "("+x+","+y+")"; } }
the class Point
has two members that are methods with the same name, move
.
The overloaded move
method of class Point
chosen for any particular method
invocation is determined at compile time by the overloading resolution procedure
given in §15.11.
In this example, the members of the class Point
are the float
instance variables x
and y
declared in Point
, the two declared move
methods, the declared toString
method, and the members that Point
inherits from its implicit direct superclass Object
(§4.3.2), such as the method hashCode
(§20.1.4). Note that Point
does not inherit the toString
method (§20.1.2) of class Object
because that method is overridden by the declaration of the toString
method in class Point
.