Java İç İçe Statik Sınıf

Bu öğreticide, örnekler yardımıyla iç içe geçmiş statik sınıf hakkında bilgi edineceksiniz. Statik sınıfların iç sınıflardan ne kadar farklı olduğunu da öğreneceksiniz.

Önceki eğitimlerde öğrendiğimiz gibi, Java'da başka bir sınıfın içinde bir sınıfımız olabilir. Bu tür sınıflar, yuvalanmış sınıflar olarak bilinir. Java'da, yuvalanmış sınıflar iki türdendir:

  • Statik olmayan iç içe sınıf (İç sınıf)
  • İç içe yerleştirilmiş statik sınıf.

Önceki derste iç sınıfları zaten tartışmıştık. İç sınıflar hakkında bilgi edinmek istiyorsanız Java İç İçe Sınıfını ziyaret edin.

Bu eğitimde, iç içe yerleştirilmiş statik sınıflar hakkında bilgi edineceğiz.

Java İç İçe Statik Sınıf

staticİç içe geçmiş sınıfımızı statik yapmak için anahtar kelimeyi kullanırız.

Not: Java'da, yalnızca yuvalanmış sınıfların statik olmasına izin verilir.

Normal sınıflar gibi, statik iç içe geçmiş sınıflar hem statik hem de statik olmayan alanlar ve yöntemler içerebilir. Örneğin,

 Class Animal ( static class Mammal ( // static and non-static members of Mammal ) // members of Animal ) 

Statik iç içe geçmiş sınıflar, dış sınıfla ilişkilendirilir.

Statik yuvalanmış sınıfa erişmek için, dış sınıfın nesnelerine ihtiyacımız yoktur.

Örnek: Statik Yuvalanmış Sınıf

 class Animal ( // inner class class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) // static class static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) ) class Main ( public static void main(String() args) ( // object creation of the outer class Animal animal = new Animal(); // object creation of the non-static class Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // object creation of the static nested class Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); ) ) 

Çıktı

Ben bir sürüngenim Ben memeliyim

Yukarıdaki programda, bir Hayvan sınıfının içinde iki yuvalanmış sınıf Memeli ve Sürüngen var.

Statik olmayan Reptile sınıfından bir nesne oluşturmak için kullandık

 Animal.Reptile reptile = animal.new Reptile() 

Statik Mammal sınıfının bir nesnesini oluşturmak için kullandık

 Animal.Mammal mammal = new Animal.Mammal() 

Dış Sınıf Üyelerine Erişim

Java'da statik iç içe geçmiş sınıflar, dış sınıfla ilişkilendirilir. Statik yuvalanmış sınıfların yalnızca dış sınıfın sınıf üyelerine (statik alanlar ve yöntemler) erişebilmesinin nedeni budur.

Dış sınıfın statik olmayan alanlarına ve yöntemlerine erişmeye çalışırsak ne olacağını görelim.

Örnek: Statik olmayan üyelere erişim

 class Animal ( static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) public void eat() ( System.out.println("I eat food."); ) ) class Main ( public static void main(String() args) ( Animal animal = new Animal(); Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); mammal.eat(); ) ) 

Çıktı

Main.java:28: hata: memeli.eat () sembolü bulunamıyor; sembol: yöntem eat () konum: değişken memeli Memeli 1 hatası derleyici çıkış durumu 1

Yukarıdaki örnekte, eat()Animal sınıfı içinde statik olmayan bir yöntem oluşturduk .

Şimdi, eat()memeli nesnesini kullanarak erişmeye çalışırsak , derleyici bir hata gösterir.

Çünkü memeli, statik bir sınıfın nesnesi ve statik sınıflardan statik olmayan yöntemlere erişemiyoruz.

Statik Üst Düzey Sınıf

Yukarıda belirtildiği gibi, yalnızca yuvalanmış sınıflar statik olabilir. Statik üst düzey sınıflarımız olamaz.

Bir üst seviye sınıfı statik yapmaya çalışırsak ne olacağını görelim.

 static class Animal ( public static void displayInfo() ( System.out.println("I am an animal"); ) ) class Main ( public static void main(String() args) ( Animal.displayInfo(); ) ) 

Çıktı

 Main.java:1: hata: statik değiştiriciye burada izin verilmez statik sınıf Hayvan (1 derleyici çıkış durumu 1 hatası 

Yukarıdaki örnekte, statik bir Animal sınıfı oluşturmaya çalıştık. Java, statik üst düzey sınıfa izin vermediğinden, bir hata alacağız.

Ilginç makaleler...