Statik iç içe sınıflar - 1

"Yani, iki numaralı konu statik iç içe sınıflar. Statik olmayan iç içe sınıflara iç sınıflar denildiğini unutmayın .

"Statik kelimesinin iç içe sınıf bildirimi bağlamında ne anlama geldiğine kafa yoralım. Ne düşünüyorsun?"

"Bir değişken statik olarak bildirilirse, değişkenin yalnızca bir kopyası vardır. Yani, iç içe geçmiş bir sınıf statikse, bu, o sınıftan yalnızca bir nesne oluşturabileceğiniz anlamına mı gelir?"

" Statik kelimesi burada kafanızı karıştırmasın. Bir değişken statik olarak bildirilmişse o zaman değişkenin yalnızca bir kopyası olduğu doğrudur. Ancak statik iç içe bir sınıf bu açıdan daha çok statik bir yöntem gibidir. sınıf bildiriminden önceki statik sözcüğü, sınıfın dış sınıfının nesnelerine yapılan başvuruları saklamadığını gösterir."

"Ah. Normal yöntemler dolaylı olarak bir nesne referansını saklar ama statik yöntemler saklamaz. Statik sınıflarda da durum aynıdır, değil mi Ellie?"

"Kesinlikle. Hızlı anlayışınız takdire şayan. Statik iç içe geçmiş sınıfların, dış sınıflarındaki nesnelere gizli referansları yoktur."

class Zoo
{
 private static int count = 7;
 private int mouseCount = 1;

 public static int getAnimalCount()
 {
  return count;
 }

 public int getMouseCount()
 {
  return mouseCount;
 }

 public static class Mouse
 {
  public Mouse()
  {
  }
   public int getTotalCount()
  {
   return count + mouseCount; // Compilation error.
  }
 }
}

"Bu örneği dikkatle inceleyelim."

"Statik getAnimalCount yöntemi hangi değişkenlere erişebilir?"

"Yalnızca statik olanlar. Çünkü statik bir yöntem."

"getMouseCount yöntemi hangi değişkenlere erişebilir?"

"Hem statik hem de statik olmayan. Bir Zoo nesnesine gizli bir referansı (bu) var."

"Doğru. Yani, statik bir yöntem gibi statik iç içe Mouse sınıfı, Zoo sınıfının statik değişkenlerine erişebilir, ancak statik olmayanlara erişemez."

"Tek bir Zoo nesnesi oluşturulmamış olsa bile Mouse nesnelerini güvenle oluşturabiliriz. Bunu şu şekilde yapabilirsiniz:"

class Home
{
 public static void main(String[] args)
 {
  Zoo.Mouse mouse = new Zoo.Mouse();
 }
}

"Fare sınıfı aslında çok sıradan bir sınıf. Zoo sınıfı içinde bildirilmiş olması ona iki özel özellik kazandırıyor."

1) Dış sınıfın dışında iç içe geçmiş bir sınıfın (Mouse sınıfı gibi) nesnelerini oluştururken, dış sınıfın adını belirtmek için nokta operatörünü de kullanmalısınız.

"Bunun gibi, örneğin: Zoo.Mouse."

2) Zoo.Mouse sınıfı ve nesneleri, Zoo sınıfının özel statik değişkenlerine ve yöntemlerine erişebilir (çünkü Mouse sınıfı aynı zamanda Zoo sınıfı içinde bildirilir).

"Bugünlük bu kadar."

"Yani sadece ek bir isim, o kadar mı?"

"Evet."

"Bu ilk başta göründüğünden bile daha kolay."