U objektno orijentiranom programiranju (OOP), ugniježđena klasa je klasa koja je u potpunosti sadržana u drugoj klasi. Različiti računalni jezici imaju podršku za ovu objektno orijentiranu strukturu, uključujući C++ i programski jezik Java. Ako ugniježđena klasa nije deklarirana kao statična, može se nazvati i unutarnjom klasom. Klasa može sadržavati bilo koji broj unutarnjih klasa, a svaka unutarnja klasa također može sadržavati vlastite unutarnje klase. Ugniježđene klase mogu biti vrlo korisne, ali također mogu brzo zakomplicirati strukture klasa, pa je najbolje da se koriste kao dio pažljivog plana kako ne bi postale nepotrebno složene.
Ugniježđena klasa je često korisna za kapsuliranje malih skupina funkcija ili varijabli koje su korisne za drugu specifičnu klasu. Na primjer, ako klasa A sadrži skupinu metoda koje samo ona koristi, te metode se mogu grupirati u unutarnju klasu B. Metode unutar unutarnje klase imaju pristup varijablama i metodama vanjske klase uz održavanje vlastitih varijabli ili konstanti prema potrebi. Ugniježđena klasa može se koristiti ili kao funkcionalna ili kao organizacijska konstrukcija; iako je korisno zaokružiti funkcionalnost, jednako je korisno i kao organizacijski alat. Idealna upotreba unutarnjih klasa zajedno će grupirati povezane funkcionalnosti i organizirati kod za lakšu čitljivost i razumijevanje.
Komentiranje treba biti učinjeno na ugniježđenoj klasi baš kao što se radi na vanjskoj klasi; početnicima je lako pomiješati unutarnje klase s metodama i zaboraviti ovo. Kada komentirate ugniježđenu klasu, najbolje je da je smatrate klasom najviše razine i komentirate je u skladu s tim. Komentari unutarnje klase također pružaju priliku programeru da razjasni funkcionalnost unutarnje klase i obrazloženje njezine organizacijske sheme. Više unutarnjih klasa može postojati unutar jedne vanjske klase, pa je za programera posebno važno da svaku jasno komentira.
Ako ugniježđena klasa nije deklarirana kao statična, instanca vanjske klase mora biti eksplicitno kreirana prije nego što se stvori instanca unutarnje klase. Za unutarnje klase koje su deklarirane kao statičke, to nije točno. Statička ugniježđena klasa obično se može kreirati s manje pritisaka na tipke i može imati širi opseg od jednostavne unutarnje klase, tako da su statičke ugniježđene klase korisne za stvaranje lako dostupnih uslužnih metoda, kao što su tvornice ili jednostavne samostalne metode sa širokim aplikacijama.
Programerima je često od pomoći kada se ugniježđene klase opisuju pomoću Unified Modeling Language. Unified Modeling Language označava i ilustrira strukturu i ponašanje klase na nedvosmislen način, često koristeći dijagrame. Ugniježđene klase dobivaju nezavisne opise od vanjskih klasa u kojima se nalaze, tako da je njihovu funkcionalnost vrlo lako identificirati i analizirati. Iako nije potrebno da ugniježđena klasa bude označena na ovaj način, često je bolje da programeri pogriješe na strani više detalja.