Myslím, že důvod je ten, že při překladu té anonymní třídy se z ní udělá obyčejná vnitřní třída a hodnota proměnné y
se do ní promítne jako konstanta (atribut s modifikátorem final
). Nic jiného než konstanta to ani být nemůže, protože proměnná y
vnější třídy je mimo dosah (scope) – kód definovaný ve vnitřní třídě by za běhu neměl jak zjistit její hodnotu. Z toho pramení požadavek na neměnnost proměnné y
.
K atributům vnější třídy má AnonClass
přístup, takže tam požadavek na neměnnost hodnoty není.