Por que variáveis finais estáticas são aceitas em classes locais?

Eu pesquisei isso extensivamente no Google, sem sucesso. Parece que não consigo entender esse conceito. Por que os campos finais estáticos são aceitos nas classes locais? Como o exemplo a seguir:

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();
    }

Na aula EnglishGoodbye a variável adeus é permitida? Por quê? Estou confuso. Por que isso é permitido, mas nenhuma variável estática? Entendo por que ele não pode acessar os membros do escopo anexo, a menos que sejam uma constante de tempo do compilador, pois essas variáveis deixam de existir quando a função termina, mas a classe pode não. Direito? Estou apenas confuso com isso.

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion