Luokkahierarkia, jota kutsutaan myös luokkataksonomiaksi, on ryhmä sukua olevia luokkia, jotka on kytketty perinnön kautta tekemään samanlaisia asioita. Hierarkian yläosa voi olla yksi perusluokka, josta kaikki muut sen alapuolella olevat luokat on johdettu, tai hierarkialla voi olla useita perusluokkia, joiden toiminnallisuudet yhdistyvät myöhemmin yhteen tai useampaan johdettuun luokkaan. Luokkien väliset suhteet voidaan havainnollistaa puina, ja jokaista pienempää puuta suuressa taksonomiassa voidaan pitää myös hierarkiana.
Kaikilla luokkahierarkioilla ei voi olla useita juuria, ja minkä tahansa luokkahierarkian rakenne riippuu suurelta osin kielestä, jolla se on kirjoitettu. C ++ sallii usean perimisen, joten monimutkaisia hierarkioita voidaan rakentaa useilla juurilla ja useilla puilla, jotka sulautuvat toisiinsa. Java® puolestaan rajoittuu yksittäiseen perintöön, joten sen luokkasuhteet ovat yleensä yksinkertaisempia, ja ne on rakennettu suhteellisen itsenäisiksi puiksi, joilla on yksi juuri. Rajapinnan periminen voi lisätä Java® -luokan hierarkiaan monimutkaisuutta, mutta rajapintoja ei käytetä lähes koskaan niin monimutkaisessa kehyksessä, että se olisi kuin puiden yhdistämistä toisiinsa.
Luokkahierarkian osat voivat vaihdella tyypiltään ja toiminnaltaan, kunhan kielen sääntöjä noudatetaan aina perinnön suhteen. Luokat hierarkiassa voivat olla julkisia, suojattuja, abstrakteja, konkreettisia tai virtuaalisia. Myös käyttöliittymiä, globaaleja toimintoja ja ystäviä voidaan käyttää. Tietokoneen kielestä riippuen jotkut näistä tyypeistä voivat olla perinnöllisempiä kuin toiset. Yleensä hierarkiat ovat erittäin joustavia, ja niitä voidaan käyttää monin tavoin moniin tarkoituksiin.
Ei ole tiukkoja sääntöjä siitä, missä tietyt luokat on sijoitettava hierarkiaan. Mikä tahansa luokka voi olla jokin edellä mainituista tyypeistä. Yleensä hierarkian viimeisten luokkien, joiden alla ei ole johdettuja luokkia, tulisi olla julkisia ja konkreettisia. Koska puhtaasti abstrakteja luokkahierarkioita voi kuitenkin olla olemassa, tämä on kuitenkin vain nyrkkisääntö.
Vaikka luokkahierarkia voi olla hyödyllinen työkalu koodin järjestämisessä ja toiminnallisuuden koteloimisessa, saattaa olla tilanteita, joissa liian syvälle hierarkiaan syventyminen voi todella hämmentää koodin sen sijaan, että selkeyttäisi sitä ja helpottaisi ylläpitoa. Vankan suhteen luominen monien luokkien välillä vaatii tiettyä ennakointia; Vaikka aluksi saattaa olla helpompaa jakaa koodi useiksi pieniksi paloiksi, niitä voi myöhemmin olla vaikeampi käsitellä. Kun luokkahierarkia on rakennettu oikein, se auttaa sekä kehittäjiä että käyttäjiä määrittämään luokkien toiminnan. Jos se on rakennettu ilman huoltoa ja selkeyttä, monet perintötasot voivat olla hämmentäviä katsoa taaksepäin ja ymmärtää.