chcę wiedzieć, dlaczego java zabrania statycznych pól / metod wewnątrz klas wewnętrznych
Ponieważ te klasy wewnętrzne są klasami wewnętrznymi „instancji”. Oznacza to, że są one jak atrybut instancji otaczającego obiektu.
Ponieważ są to klasy „instancji”, nie ma sensu zezwalać na static
funkcje, ponieważ static
ma działać bez instancji.
To tak, jakbyś próbował jednocześnie utworzyć atrybut static / instance.
Weźmy następujący przykład:
class Employee {
public String name;
}
Jeśli utworzysz dwie instancje pracownika:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
Oczywiste jest, dlaczego każdy ma swoją wartość dla nieruchomości name
, prawda?
To samo dzieje się z klasą wewnętrzną; każda instancja klasy wewnętrznej jest niezależna od drugiej instancji klasy wewnętrznej.
Więc jeśli spróbujesz utworzyć counter
atrybut klasy, nie ma możliwości udostępnienia tej wartości w dwóch różnych instancjach.
class Employee {
public String name;
class InnerData {
static count;
}
}
Podczas tworzenia instancji a
oraz b
w powyższym przykładzie, co byłoby poprawne wartości dla zmiennej statycznej count
? Nie można tego określić, ponieważ istnienie InnerData
klasy zależy całkowicie od każdego z otaczających obiektów.
Dlatego, gdy klasa jest zadeklarowana jako static
, nie potrzebuje już żywej instancji, aby sama żyć. Teraz, gdy nie ma żadnej zależności, możesz swobodnie zadeklarować atrybut statyczny.
Wydaje mi się, że brzmi to powtarzalnie, ale jeśli pomyślisz o różnicach między atrybutami instancji a atrybutami klas, będzie to miało sens.