lo que quiero saber es por qué Java prohíbe los campos / métodos estáticos dentro de las clases internas
Porque esas clases internas son clases internas de "instancia". Es decir, son como un atributo de instancia del objeto adjunto.
Dado que son clases de "instancia", no tiene sentido permitir static
características, ya que static
está destinado a funcionar sin una instancia en primer lugar.
Es como si intentaras crear un atributo estático / instancia al mismo tiempo.
Tome el siguiente ejemplo:
class Employee {
public String name;
}
Si crea dos instancias de empleado:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
Está claro por qué cada uno tiene su propio valor para la propiedad name
, ¿verdad?
Lo mismo ocurre con la clase interior; cada instancia de clase interna es independiente de la otra instancia de clase interna.
Entonces, si intenta crear un counter
atributo de clase, no hay forma de compartir ese valor entre dos instancias diferentes.
class Employee {
public String name;
class InnerData {
static count;
}
}
Cuando crea la instancia a
y b
en el ejemplo anterior, ¿cuál sería un valor correcto para la variable estática count
? No es posible determinarlo, porque la existencia de la InnerData
clase depende completamente de cada uno de los objetos que la encierran.
Por eso, cuando la clase se declara como static
, ya no necesita una instancia viva para vivir ella misma. Ahora que no hay dependencia, puede declarar libremente un atributo estático.
Creo que esto suena reiterativo, pero si piensa en las diferencias entre los atributos de instancia y de clase, tendrá sentido.