Klasy anonimowe to klasy, którym osoba programująca klasę nie nadaje nazwy. Są one zwykle używane, gdy nazywanie klasy nie jest konieczne, na przykład gdy klasa jest niczym więcej niż wymaganym podzbiorem innej wyższej nadklasy. Zaletą programowania klas anonimowych jest to, że dają programiście szansę na usprawnienie swojego kodu, szczególnie w przypadkach, gdy klasy anonimowe będą pasować do wielu nadklas. Główną wadą jest to, że klasy anonimowe nie mogą definiować konstruktorów ani być prywatnymi, chronionymi lub statycznymi, ponieważ brak nazwy eliminuje te możliwości.
W programowaniu komputerowym klasa to uogólniony obiekt, który może występować w dowolnej liczbie określonych wystąpień. Podobnie jak termin „samolot” szeroko obejmuje wszystkie typy samolotów jednosilnikowych, dwusilnikowych, samolotów wojskowych i statków pasażerskich, „klasa” w kategoriach obliczeniowych jest ogólną instancją obiektu. To nic innego jak szablon, który można wypełnić według potrzeb programistów lub użytkownika końcowego. Na przykład utworzenie klasy o nazwie „rower” prawdopodobnie zawierałoby parametry roweru; innymi słowy, rozmiar i typ opon, liczba biegów, konkretna marka i model roweru i tak dalej.
Programiści zazwyczaj używają klas anonimowych jako podzbiorów nadklas, które są klasami zbudowanymi z wielu własnych klas. Kontynuując poprzedni przykład z klasą „rower”, anonimową podklasą, która może być „opony”, zawierająca informacje o rozmiarze opony, marce i tak dalej.
Zaletą takiego postępowania jest to, że anonimowa klasa „opon” mogłaby równie dobrze pasować do superklasy „rowerów” lub superklasy „samochodów”. Tworząc ją jako anonimową klasę, programista może w razie potrzeby łatwiej ponownie wykorzystać swoją pracę. Oszczędza to czas i koszty oraz znacznie ułatwia zrozumienie kodu.
Wadą jest to, że bez nazwy klasy anonimowe nie mogą korzystać z tych samych funkcji, co klasy nazwane. Na przykład nie można ich uznać za klasy prywatne, chronione lub ograniczone. Ponadto nie mogą używać konstruktorów, które są podprogramami, gdy po raz pierwszy pojawia się klasa, która inicjuje klasę z domyślnymi parametrami. Ten brak elastyczności jest naturalnym kompromisem dla prostoty anonimowej klasy.