Dalam pemrograman berorientasi objek (OOP), kelas bersarang adalah kelas yang sepenuhnya terkandung dalam kelas lain. Berbagai bahasa komputer memiliki dukungan untuk struktur berorientasi objek ini, termasuk C++ dan bahasa pemrograman Java. Jika kelas bersarang tidak dinyatakan statis, itu juga bisa disebut kelas dalam. Sebuah kelas dapat berisi sejumlah kelas dalam, dan setiap kelas dalam juga dapat berisi kelas dalam sendiri. Kelas bersarang bisa sangat berguna, tetapi mereka juga dapat membuat struktur kelas menjadi rumit dengan cepat, jadi yang terbaik adalah menggunakannya sebagai bagian dari rencana yang cermat sehingga tidak menjadi rumit yang tidak perlu.
Kelas bersarang sering membantu untuk merangkum kelompok kecil fungsi atau variabel yang berguna untuk kelas tertentu lainnya. Misalnya, jika kelas A berisi sekelompok metode yang hanya digunakannya, metode ini dapat dikelompokkan ke dalam kelas dalam B. Metode di dalam kelas dalam memiliki akses ke variabel dan metode kelas luar sambil mempertahankan variabel atau konstanta mereka sendiri jika diperlukan. Kelas bersarang dapat digunakan sebagai konstruksi fungsional atau organisasi; sementara itu berguna untuk merangkum fungsionalitas, itu sama-sama berguna sebagai alat organisasi. Penggunaan kelas dalam yang ideal akan mengelompokkan fungsionalitas terkait dan mengatur kode agar lebih mudah dibaca dan dipahami.
Mengomentari harus dilakukan pada kelas bersarang seperti yang dilakukan pada kelas luar; mudah bagi pemula untuk mengacaukan kelas dalam dengan metode dan melupakan ini. Saat mengomentari kelas bersarang, yang terbaik adalah menganggapnya sebagai kelas tingkat atas dan mengomentarinya dengan tepat. Komentar kelas dalam juga memberikan kesempatan bagi programmer untuk mengklarifikasi fungsionalitas kelas dalam dan alasan di balik skema organisasinya. Beberapa kelas dalam bisa ada dalam satu kelas luar, jadi sangat penting bagi programmer untuk mengomentari masing-masing dengan jelas.
Jika kelas bersarang tidak dideklarasikan statis, turunan kelas luar harus dibuat secara eksplisit sebelum turunan kelas dalam dibuat. Untuk kelas dalam yang dinyatakan statis, ini tidak benar. Kelas bersarang statis biasanya dapat dibuat dengan penekanan tombol yang lebih sedikit dan mungkin memiliki cakupan yang lebih luas daripada kelas dalam yang sederhana, sehingga kelas bersarang statis berguna untuk membuat metode utilitas yang mudah diakses, seperti pabrik atau metode mandiri sederhana dengan aplikasi luas.
Seringkali membantu pengembang ketika kelas bersarang dijelaskan menggunakan Bahasa Pemodelan Terpadu. Bahasa Pemodelan Terpadu membubuhi keterangan dan mengilustrasikan struktur dan perilaku kelas dengan cara yang tidak ambigu, sering kali menggunakan diagram. Kelas bersarang diberikan deskripsi independen dari kelas luar di mana mereka berada, sehingga sangat mudah untuk fungsionalitas mereka untuk diidentifikasi dan dianalisis. Meskipun tidak diperlukan untuk kelas bersarang untuk dijelaskan dengan cara ini, seringkali lebih baik bagi programmer untuk berbuat salah di sisi detail yang lebih besar.