Las clases internas en Java permiten anidar clases dentro de otras clases o bloques de código. Esto agrupa clases relacionadas, controla la visibilidad y facilita la definición de clases auxiliares simples. Existen clases internas estáticas, clases miembro y clases locales, cada una con características diferentes de acceso y ámbito.