Klasių hierarchija, dar vadinama klasių taksonomija, yra grupė susijusių klasių, kurios yra sujungtos per paveldėjimą, kad galėtų atlikti panašius dalykus. Hierarchijos viršuje gali būti viena bazinė klasė, iš kurios yra išvestos visos kitos žemiau jos esančios klasės, arba hierarchija gali turėti kelias bazines klases, kurių funkcijos vėliau susilieja vienoje ar keliose išvestinėse klasėse. Santykiai tarp klasių gali būti iliustruojami kaip medžiai, o kiekvienas mažesnis medis didelėje taksonomijoje taip pat gali būti laikomas hierarchija.
Ne visos klasių hierarchijos gali turėti kelias šaknis, o bet kurios klasių hierarchijos struktūra labai priklauso nuo kalbos, kuria ji parašyta. C++ leidžia daugkartinį paveldėjimą, todėl galima sukurti sudėtingas hierarchijas su keliomis šaknimis ir keliais medžiais, kurie susilieja vienas į kitą. Kita vertus, Java® apsiriboja vienkartiniu paveldėjimu, todėl jos klasių ryšiai paprastai yra paprastesni, sukurti kaip santykinai savarankiški medžiai, turintys vieną šaknį. Sąsajos paveldėjimas gali suteikti tam tikro sudėtingumo Java® klasių hierarchijai, tačiau sąsajos beveik niekada nėra iškviečiamos tokioje sudėtingoje sistemoje, kad tai būtų tarsi medžių sujungimas.
Klasių hierarchijos komponentai gali skirtis pagal tipą ir funkciją, jei paveldėjimo atžvilgiu visada laikomasi kalbos taisyklių. Klasės hierarchijoje gali būti viešos, saugomos, abstrakčios, konkrečios arba virtualios. Taip pat gali būti naudojamos sąsajos, pasaulinės funkcijos ir draugai. Priklausomai nuo kompiuterio kalbos, kai kurie iš šių tipų gali būti labiau paveldimi nei kiti. Apskritai hierarchijos yra labai lanksčios ir gali būti naudojamos įvairiais būdais įvairiems tikslams.
Nėra griežtų taisyklių, nustatančių, kur tam tikros klasės turi būti išdėstytos hierarchijoje. Bet kuri klasė gali būti bet kuri iš aukščiau paminėtų tipų. Apskritai, paskutinės hierarchijos klasės, po kuriomis nėra išvestinių klasių, turėtų būti viešos ir konkrečios. Kadangi gali egzistuoti ir grynai abstrakčios klasių hierarchijos, tai tik nykščio taisyklė.
Nors klasių hierarchija gali būti naudingas įrankis kodui tvarkyti ir funkcijoms apibendrinti, kartais gali būti, kad pernelyg giliai įsigilinus į hierarchiją, kodas gali būti supainiotas, o ne jį paaiškinti ir lengviau prižiūrėti. Norint sukurti tvirtus ryšius tarp daugelio klasių, reikia tam tikro įžvalgumo; Nors iš pradžių gali būti lengviau suskaidyti kodą į daugybę mažų gabalėlių, vėliau su jais gali būti sunkiau tvarkyti. Tinkamai sukurta klasių hierarchija padeda kūrėjams ir vartotojams nustatyti, kaip klasės veikia. Jei jis pastatytas be priežiūros ir aiškumo, daugybė paveldėjimo lygių gali būti painu žvelgti atgal ir suprasti.