Por que uma classe local estática não é permitida em um método? [fechadas]
Estou escovando meu java e tenho algum mal-entendido sobre classes locais (que eu nunca usei), entendo bem o conceito de estática, mas não no caso deaulas locais.
1. Por que um método estático não é permitido em classes locais?
2. Por que uma classe local estática não é permitida em um método?
Um método estático não permitido em classes locais:Aqui eu não entendo. Para mim, a classe local está ligada ao método estático main. Só não entendo por que isso não pode ser feito. O método main é acessado através da classe Sequence e, como sayGoodbye é estático, deve ser acessado através de sua classe. Mas não.
public class Sequence {
public static void main(String... args) {
class EnglishGoodbye {
public static void sayGoodbye() { // this cannot be done
System.out.println("Bye bye");
}
}
EnglishGoodbye.sayGoodbye();
}
}
Uma classe local estática não permitida em um método:Isso não pode ser feito: é um pouco ambíguo, mas eu acho que uma estática aqui teria o mesmo significado que uma não estática, pois a classe estática está vinculada a um método estático. Estou confuso.
public class Sequence {
public static void main(String... args) {
static class EnglishGoodbye { //static local classes not allowed
public static void sayGoodbye() {
System.out.println("Bye bye");
}
}
EnglishGoodbye.sayGoodbye();
}
}
Editar: A primeira resposta que recebi foi uma citação do oracle:
As classes locais não são estáticas porque têm acesso aos membros da instância do bloco anexo. Conseqüentemente, eles não podem conter a maioria dos tipos de declarações estáticas.
e minha resposta:
Isso realmente não explica tudo. Quando você tem uma classe interna, não pode acessar campos não estáticos, mas pode acessar campos estáticos. O mesmo se aplica a uma classe local e, como não há variável estática, é inútil. Mas e os métodos, como no meu exemplo.
Ok, eu fiz um esquema para explicar melhor como eu vejo as coisas. Pode ser totalmente errado, porém, e tenho um pouco de vergonha de mostrar isso. Nesse esquema e no cenário em que uma classe local estáticaseria estar acessível, eu teria uma classe local no bloco de memória superior. Sempre que o método estático2 fosse chamado, ele simplesmente se referiria a ele.