We will discuss the reasons for creating abstract classes later. The opposite of an abstract class is a final class. A final class cannot be subclassed . The reasons for using final classes will also be discussed later. While it is technically possible to declare a class with several combinations of public , abstract , and final , it doesn't make any sense to cause a class to be both abstract and final , and an attempt to do so will result in a compiler error .
Modifiers declare whether the class is public , abstract , or final .
ClassName defines the name that will be used to instantiate objects of the type or to access class members. This becomes the name of a new type. SuperClassName is the name of the immediate superclass from which the class is subclassed . InterfaceNames is a comma-separated list of interfaces implemented by the class. Other than the opening and closing braces, only the class keyword and the name for the class are required .