O clasă de bază, numită și superclasă, este un obiect computer care acționează ca bază pentru una sau mai multe clase derivate. Orice limbaj de computer care este capabil de moștenire poate crea o clasă de bază. În funcție de tipul lor precis, clasele de bază pot fi sau nu capabile de inițializare – atribuind o valoare inițială unui obiect – pe cont propriu, dar oferă întotdeauna un fel de funcționalitate comună oricărei clase care moștenește de la ele. Nu există niciodată o limită a numărului de clase derivate, sau subclase, pe care le pot avea clasele de bază, dar poate exista o limită, în funcție de limbajul computerului, la numărul de clase de bază pe care le poate avea o clasă derivată. Limbile care permit unei clase derivate să aibă o singură bază se spune că impun o moștenire unică, în timp ce cele care permit unei clase derivate să aibă mai multe clase de bază utilizează moștenirea multiplă.
Clasele de bază concrete pot fi inițializate singure; adică se poate realiza un obiect de tipul clasei de bază. Dacă o clasă Exemplu este o bază pentru o clasă derivată Exemplu2, se pot realiza ambele un obiect de tip Exemplu2 și un obiect de tip Exemplu. Un obiect de tipul Exemplu poate fi realizat doar prin apelarea explicită pentru acel tip de obiect; crearea unui obiect de tip Example2 nu face un obiect secundar de tip Example. În fiecare caz, tipul de obiect creat construiește doar o instanță a lui însuși.
Clasele de bază abstracte, dimpotrivă, nu pot fi inițializate singure, ceea ce înseamnă că un obiect al clasei de bază nu poate fi realizat de la sine. Dacă o clasă Example3 este o bază abstractă pentru o clasă derivată Example4, poate fi creat doar un obiect de tipul Example4. Chiar dacă tipul Example4 include date din tipul Example3, încercarea de a face un obiect exclusiv de tipul Example3 va duce la o eroare. Această funcționalitate poate fi utilă uneori, mai ales dacă clasa Example3 conține date private care ar trebui să fie strict reglementate.
În funcție de limba în care apare, o clasă de bază poate avea comportamente ușor diferite și nume semnificativ diferite. În Java®, clasele de bază sunt întotdeauna denumite cu acest nume, în timp ce în C++, în funcție de structura lor, pot fi numite clase virtuale. Diferențele de nume și funcționalitate, deși semnificative în ceea ce privește limbajele de calculator utilizate, nu implică diferențe majore în principiul din spatele claselor. O clasă de bază este întotdeauna utilizată pentru a încapsula funcționalitatea și datele comune pentru clasele sale derivate, indiferent de limbaj.