ce que je veux savoir, c'est pourquoi java interdit les champs / méthodes statiques à l'intérieur des classes internes
Parce que ces classes internes sont des classes internes "d'instance". Autrement dit, ils sont comme un attribut d'instance de l'objet englobant.
Puisqu'il s'agit de classes "d'instance", cela n'a aucun sens d'autoriser les static
fonctionnalités, car cela static
est censé fonctionner sans instance en premier lieu.
C'est comme si vous essayiez de créer un attribut statique / instance en même temps.
Prenons l'exemple suivant:
class Employee {
public String name;
}
Si vous créez deux instances d'employé:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
Il est clair pourquoi chacun a sa propre valeur pour la propriété name
, non?
La même chose se produit avec la classe interne; chaque instance de classe interne est indépendante de l'autre instance de classe interne.
Donc, si vous essayez de créer un counter
attribut de classe, il n'y a aucun moyen de partager cette valeur entre deux instances différentes.
class Employee {
public String name;
class InnerData {
static count;
}
}
Lorsque vous créez l'instance a
et b
dans l'exemple ci-dessus, quelle serait une valeur correcte pour la variable statique count
? Il n'est pas possible de le déterminer, car l'existence duInnerData
classe dépend entièrement de chacun des objets englobants.
C'est pourquoi, lorsque la classe est déclarée comme static
, elle n'a plus besoin d'une instance vivante pour se vivre. Maintenant qu'il n'y a pas de dépendance, vous pouvez déclarer librement un attribut statique.
Je pense que cela semble répétitif, mais si vous pensez aux différences entre les attributs d'instance et de classe, cela aura du sens.