quello che voglio sapere è perché java proibisce i campi / metodi statici all'interno delle classi interne
Perché quelle classi interne sono classi interne "istanza". Cioè, sono come un attributo di istanza dell'oggetto che lo racchiude.
Dal momento che sono classi di "istanza", non ha alcun senso consentire le static
funzionalità, poiché static
è destinato a funzionare senza un'istanza in primo luogo.
È come se provassi a creare un attributo statico / istanza allo stesso tempo.
Prendiamo il seguente esempio:
class Employee {
public String name;
}
Se crei due istanze di dipendente:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
È chiaro perché ognuno ha il suo valore per la proprietà name
, giusto?
Lo stesso accade con la classe interna; ogni istanza della classe interna è indipendente dall'altra istanza della classe interna.
Pertanto, se si tenta di creare un counter
attributo di classe, non è possibile condividere tale valore tra due istanze diverse.
class Employee {
public String name;
class InnerData {
static count;
}
}
Quando crei l'istanza a
e b
nell'esempio sopra, quale sarebbe un valore corretto per la variabile statica count
? Non è possibile determinarlo, perché l'esistenza della InnerData
classe dipende completamente da ciascuno degli oggetti che la racchiudono.
Ecco perché, quando la classe è dichiarata come static
, non ha più bisogno di un'istanza vivente, per vivere se stessa. Ora che non c'è dipendenza, puoi dichiarare liberamente un attributo statico.
Penso che questo suoni ripetitivo, ma se pensi alle differenze tra attributi di istanza e attributi di classe, avrà senso.