The optional extends clause in a class declaration specifies the direct superclass
of the current class. A class is said to be a direct subclass of the class it extends.
The direct superclass is the class from whose implementation the implementation
of the current class is derived. The extends clause must not appear in the definition of the class java.lang.Object (§20.1), because it is the primordial class
and has no direct superclass. If the class declaration for any other class has no
extends clause, then the class has the class java.lang.Object as its implicit
direct superclass.
Super:
extendsClassType
The following is repeated from §4.3 to make the presentation here clearer:
ClassType:
TypeName
The ClassType must name an accessible (§6.6) class type, or a compile-time error occurs. All classes in the current package are accessible. Classes in other packages are accessible if the host system permits access to the package (§7.2) and the class is declared public. If the specified ClassType names a class that is final (§8.1.2.2), then a compile-time error occurs; final classes are not allowed to have subclasses.
class Point { int x, y; }
final class ColoredPoint extends Point { int color; }
class Colored3DPoint extends ColoredPoint { int z; } // error
the relationships are as follows:
Point is a direct subclass of java.lang.Object.
java.lang.Object is the direct superclass of the class Point.
ColoredPoint is a direct subclass of class Point.
Point is the direct superclass of class ColoredPoint.
The declaration of class Colored3dPoint causes a compile-time error because it
attempts to extend the final class ColoredPoint.
The subclass relationship is the transitive closure of the direct subclass relationship. A class A is a subclass of class C if either of the following is true:
Class C is said to be a superclass of class A whenever A is a subclass of C.
class Point { int x, y; }
class ColoredPoint extends Point { int color; }
final class Colored3dPoint extends ColoredPoint { int z; }
the relationships are as follows:
Point is a superclass of class ColoredPoint.
Point is a superclass of class Colored3dPoint.
ColoredPoint is a subclass of class Point.
ColoredPoint is a superclass of class Colored3dPoint.
Colored3dPoint is a subclass of class ColoredPoint.
Colored3dPoint is a subclass of class Point.
A compile-time error occurs if a class is declared to be a subclass of itself. For example:
class Point extends ColoredPoint { int x, y; }
class ColoredPoint extends Point { int color; }
causes a compile-time error. If circularly declared classes are detected at run time,
as classes are loaded (§12.2), then a ClassCircularityError is thrown.