bilmek istediğim şey, java'nın neden iç sınıflar içindeki statik alanları / yöntemleri yasakladığı
Çünkü bu iç sınıflar "örnek" iç sınıflardır. Yani, çevreleyen nesnenin bir örnek niteliği gibidirler.
"Örnek" sınıfları olduklarından, static
özelliklere izin vermenin bir static
anlamı yoktur, çünkü ilk etapta bir örnek olmadan çalışmak içindir.
Aynı anda bir statik / örnek özniteliği oluşturmaya çalışırsınız.
Aşağıdaki örneği ele alalım:
class Employee {
public String name;
}
İki çalışan örneği oluşturursanız:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
Neden her birinin mülk için kendi değeri olduğu açık name
, değil mi?
Aynı şey iç sınıf için de olur; her bir iç sınıf örneği, diğer iç sınıf örneğinden bağımsızdır.
Dolayısıyla, bir counter
sınıf özelliği oluşturmaya çalışırsanız , bu değeri iki farklı örnek arasında paylaşmanın bir yolu yoktur.
class Employee {
public String name;
class InnerData {
static count;
}
}
Örneği oluşturduğunuzda a
ve b
yukarıdaki örnekte, statik değişken için doğru değer ne olur count
? Bunu belirlemek mümkün değildir, çünkü InnerData
sınıfın varlığı tamamen çevreleyen nesnelerin her birine bağlıdır.
Bu nedenle, sınıf ilan edildiğinde static
, kendini yaşamak için artık bir canlı örneğe ihtiyaç duymuyor. Artık bağımlılık olmadığına göre, statik bir özniteliği özgürce bildirebilirsiniz.
Bunun kulağa tekrarlayıcı geldiğini düşünüyorum, ancak örnek ile sınıf nitelikleri arasındaki farkları düşünürseniz, mantıklı olacaktır.