Вы используете его в ситуациях, когда вам нужно создать класс для определенной цели внутри другой функции, например, в качестве слушателя, как runnable (для создания потока) и т. д.
Идея что вы вызываете их изнутри кода функции, чтобы вы никогда не ссылались на них в другом месте, поэтому вам не нужно их называть. Компилятор просто перечисляет их.
Они по сути являются синтаксическим сахаром и обычно должны перемещаться в другом месте по мере их роста.
Я не уверен, является ли это одним из преимуществ Java, хотя, если вы их используете (и мы все часто используем их, к сожалению), то вы можете утверждать, что они одни.