Warum werden statische Endvariablen in lokalen Klassen akzeptiert?

Ich habe dies ausgiebig ohne Erfolg gegoogelt. Ich kann nicht scheinen, meinen Kopf um dieses Konzept zu wickeln. Warum werden statische Endfelder in lokalen Klassen akzeptiert? Beispiel:

public void sayGoodbyeInEnglish() {

        class EnglishGoodbye {
            public static final String farewell = "Bye bye";
            public void sayGoodbye() {
                System.out.println(farewell);
            }
        }
        System.out.println(EnglishGoodbye.farewell);
        EnglishGoodbye myEnglishGoodbye = new EnglishGoodbye();
        myEnglishGoodbye.sayGoodbye();
    }

In der Klasse EnglishGoodbye ist der variable Abschied erlaubt? Warum? Ich bin verwirrt. Warum ist das erlaubt, aber keine statische Variable? Ich verstehe, warum es nicht auf die Member des einschließenden Gültigkeitsbereichs zugreifen kann, es sei denn, sie sind eine Compiler-Zeitkonstante, da diese Variablen nicht mehr existieren, wenn die Funktion endet, die Klasse jedoch möglicherweise nicht. Richtig? Ich bin nur verwirrt.

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage