O ierarhie de clasă, numită și taxonomie de clasă, este un grup de clase înrudite care sunt conectate prin moștenire pentru a face lucruri similare. Partea de sus a ierarhiei poate fi o singură clasă de bază din care sunt derivate toate celelalte clase de sub ea, sau ierarhia poate avea mai multe clase de bază ale căror funcționalități se îmbină mai târziu într-una sau mai multe clase derivate. Relațiile dintre clase pot fi ilustrate ca arbori, iar fiecare arbore mai mic din taxonomia mare poate fi, de asemenea, considerat o ierarhie.
Nu toate ierarhiile de clasă pot avea mai multe rădăcini, iar structura oricărei ierarhii de clasă depinde în mare măsură de limbajul în care este scrisă. C++ permite moștenirea multiplă, astfel încât ierarhiile complexe pot fi construite cu mai multe rădăcini și mai mulți arbori care fuzionează unul în celălalt. Java®, pe de altă parte, este limitat la moștenirea unică, astfel încât relațiile sale de clasă sunt de obicei mai simple, construite ca arbori relativ autonomi cu o singură rădăcină. Moștenirea interfeței poate adăuga o oarecare complexitate unei ierarhii de clasă în Java®, dar interfețele aproape niciodată nu sunt invocate într-un cadru atât de complex încât ar fi ca și cum ar fi fuzionarea copacilor împreună.
Componentele unei ierarhii de clasă pot varia ca tip și funcție, atâta timp cât regulile limbii sunt întotdeauna respectate în ceea ce privește moștenirea. Clasele dintr-o ierarhie pot fi publice, protejate, abstracte, concrete sau virtuale. De asemenea, pot fi utilizate interfețe, funcții globale și prieteni. În funcție de limbajul computerului, unele dintre aceste tipuri se pot preta mai bine la moștenire decât altele. În general, ierarhiile sunt foarte flexibile și pot fi folosite în mai multe moduri pentru mai multe scopuri.
Nu există reguli stricte privind locul în care anumite tipuri de clase trebuie plasate într-o ierarhie. Orice clasă poate fi oricare dintre tipurile menționate mai sus. În general, ultimele clase din ierarhie care nu au clase derivate sub ele ar trebui să fie publice și concrete. Deoarece pot exista și ierarhii de clasă pur abstracte, totuși, aceasta este doar o regulă generală.
Deși o ierarhie de clasă poate fi un instrument util pentru organizarea codului și încapsularea funcționalității, pot exista momente în care aprofundarea unei ierarhii poate de fapt confunda codul, mai degrabă decât să-l clarifice și să-l facă mai ușor de întreținut. Construirea unei relații robuste între multe clase necesită o anumită prevedere; în timp ce inițial ar putea fi mai ușor să spargeți codul în multe bucăți mici, acele bucăți mici pot deveni mai dificil de manipulat ulterior. Când este construită corect, o ierarhie de clase ajută atât dezvoltatorii, cât și utilizatorii să determine modul în care funcționează clasele. Dacă este construit fără întreținere și claritate în minte, multele niveluri de moștenire pot fi confuze de privit în urmă și de înțeles.