Una classe base, chiamata anche superclasse, è un oggetto computer che funge da base per una o più classi derivate. Qualsiasi linguaggio informatico in grado di ereditare può creare una classe base. A seconda del loro tipo preciso, le classi base possono o meno essere in grado di inizializzarsi, assegnando un valore iniziale a un oggetto, da sole, ma danno sempre un qualche tipo di funzionalità comune a qualsiasi classe che erediti da esse. Non c’è mai un limite al numero di classi derivate, o sottoclassi, che le classi base possono avere, ma potrebbe esserci un limite, a seconda del linguaggio del computer, al numero di classi base che una classe derivata può avere. Si dice che i linguaggi che consentono a una classe derivata di avere una sola base impongano l’ereditarietà singola, mentre quelli che consentono a una classe derivata di avere più classi base utilizzano l’ereditarietà multipla.
Le classi base concrete possono essere inizializzate da sole; cioè, può essere creato un oggetto del tipo di classe base. Se una classe Esempio è una base per una classe derivata Esempio2, è possibile creare un oggetto di tipo Esempio2 e un oggetto di tipo Esempio. Un oggetto di tipo Esempio può essere creato solo chiamando esplicitamente quel tipo di oggetto; la creazione di un oggetto di tipo Esempio2 non crea un oggetto secondario di tipo Esempio. In ogni caso, il tipo di oggetto creato crea solo un’istanza di se stesso.
Le classi base astratte, al contrario, non possono essere inizializzate da sole, il che significa che un oggetto della classe base non può essere creato da solo. Se una classe Esempio3 è una base astratta per una classe derivata Esempio4, può essere creato solo un oggetto di tipo Esempio4. Anche se il tipo Esempio4 include dati del tipo Esempio3, il tentativo di creare un oggetto esclusivamente di tipo Esempio3 genererà un errore. Questa funzionalità può essere utile a volte, in particolare se la classe Esempio3 contiene dati privati che dovrebbero essere strettamente regolamentati.
A seconda della lingua in cui appare, una classe base può avere comportamenti leggermente diversi e nomi notevolmente diversi. In Java® le classi base sono sempre indicate con quel nome, mentre in C++, a seconda della loro struttura, possono essere chiamate classi virtuali. Le differenze di nome e funzionalità, pur significative in termini di linguaggi informatici utilizzati, non implicano grandi differenze nel principio alla base delle classi. Una classe base viene sempre utilizzata per incapsulare funzionalità e dati comuni per le sue classi derivate, indipendentemente dal linguaggio.