Classes inheriting from classes.
The simplest model, adopted, e.g., in Java [Sun 2007] and C# [Microsoft 2007]. The inheritance relation forms a tree, and a derived class can inherit methods and variables only from its parent class.
(source: FeatherTrait: a modest extension of Featherweight Java, PDF)
One of the most useful ideas in object-oriented programming has been that of an abstract class. An abstract class is an incomplete class definition, in which one or more of the methods used by the class are not defined. The expectation is that these missing method definitions will be provided in subsequently defined subclasses.
Object-oriented systems are usually built around classes. Classes are de- scriptions of objects capable of serving as templates or “cookie-cutters” from which instances, the actual objects de- scribed by classes, can be created. This creation process is typically known as instantiation. In broad terms, a class represents a generic concept, or a “reci- pe,” while an instance represents an individual. A class holds the similarities among a group of objects, dictating the structure and behavior of its instances, whereas instances hold the local data representing the state of the object.
Class-based systems are quite class- centric. To add a new kind of an object to the system, a class describing the properties of that object type must be defined first. Similarly, inheritance can only take place between classes, whereas instances are completely “sterile”, i.e., incapable of serving as parents. Therefore, the model is commonly referred to as class inheritance [Stein et al. 1988; Wegner 1987, 1990].
(source: On the notion of inheritance)