Java İç İçe ve İç Sınıf (Örneklerle)

Bu öğreticide, örnekler yardımıyla Java'daki yuvalanmış sınıf ve türleri hakkında bilgi edineceksiniz.

Java'da, başka bir sınıf içinde bir sınıf tanımlayabilirsiniz. Böyle bir sınıf olarak bilinir nested class. Örneğin,

 class OuterClass ( //… class NestedClass ( //… ) )

Java'da oluşturabileceğiniz iki tür iç içe sınıf vardır.

  • Statik olmayan iç içe geçmiş sınıf (iç sınıf)
  • Statik iç içe geçmiş sınıf

Önerilen okuma :

  • Java Erişim Değiştiricileri
  • Java Statik Anahtar Kelime

Önce statik olmayan iç içe geçmiş sınıflara bakalım.

Statik Olmayan İç İçe Sınıf (İç Sınıf)

Statik olmayan iç içe geçmiş bir sınıf, başka bir sınıf içindeki bir sınıftır. Çevreleyen sınıfın (dış sınıf) üyelerine erişimi vardır. Genellikle olarak bilinir inner class.

Yana inner classdış sınıfın içinde var, sen iç sınıf örneğini amacıyla, ilk dış sınıf örneğini gerekir.

Java'da iç sınıfları nasıl ilan edebileceğinize dair bir örnek.

Örnek 1: İç sınıf

 class CPU ( double price; // nested class class Processor( // members of nested class double cores; String manufacturer; double getCache()( return 4.3; ) ) // nested protected class protected class RAM( // members of protected nested class double memory; String manufacturer; double getClockSpeed()( return 5.5; ) ) ) public class Main ( public static void main(String() args) ( // create object of Outer class CPU CPU cpu = new CPU(); // create an object of inner class Processor using outer class CPU.Processor processor = cpu.new Processor(); // create an object of inner class RAM using outer class CPU CPU.RAM ram = cpu.new RAM(); System.out.println("Processor Cache = " + processor.getCache()); System.out.println("Ram Clock speed = " + ram.getClockSpeed()); ) )

Çıktı :

 İşlemci Önbelleği = 4.3 Ram Saat hızı = 5.5

Yukarıdaki programda, iç içe geçmiş iki sınıf vardır: İşlemci ve dış sınıfın içindeki RAM: CPU. İç sınıfı korumalı olarak ilan edebiliriz. Bu nedenle RAM sınıfını korumalı olarak ilan ettik.

Main sınıfının içinde,

  • ilk olarak cpu adında bir dış sınıf CPU örneğini oluşturduk.
  • Dış sınıfın örneğini kullanarak, daha sonra iç sınıfların nesnelerini oluşturduk:
     CPU.Processor processor = cpu.new Processor; CPU.RAM ram = cpu.new RAM();

Not : .Dış sınıfı kullanarak iç sınıfın bir örneğini oluşturmak için nokta ( ) operatörünü kullanırız.

İç Sınıftaki Dış Sınıf Üyelerine Erişim

Bu anahtar kelimeyi kullanarak dış sınıfın üyelerine ulaşabiliriz. Bu anahtar kelime hakkında bilgi edinmek istiyorsanız, Java bu anahtar kelimeyi ziyaret edin.

Örnek 2: Üyelere Erişim

 class Car ( String carName; String carType; // assign values using constructor public Car(String name, String type) ( this.carName = name; this.carType = type; ) // private method private String getCarName() ( return this.carName; ) // inner class class Engine ( String engineType; void setEngine() ( // Accessing the carType property of Car if(Car.this.carType.equals("4WD"))( // Invoking method getCarName() of Car if(Car.this.getCarName().equals("Crysler")) ( this.engineType = "Smaller"; ) else ( this.engineType = "Bigger"; ) )else( this.engineType = "Bigger"; ) ) String getEngineType()( return this.engineType; ) ) ) public class Main ( public static void main(String() args) ( // create an object of the outer class Car Car car1 = new Car("Mazda", "8WD"); // create an object of inner class using the outer class Car.Engine engine = car1.new Engine(); engine.setEngine(); System.out.println("Engine Type for 8WD= " + engine.getEngineType()); Car car2 = new Car("Crysler", "4WD"); Car.Engine c2engine = car2.new Engine(); c2engine.setEngine(); System.out.println("Engine Type for 4WD = " + c2engine.getEngineType()); ) )

Çıktı :

 8WD için Motor Tipi = 4WD için Daha Büyük Motor Tipi = Daha Küçük

Yukarıdaki programda, Dış sınıf Araba içerisinde Motor adlı bir iç sınıfa sahibiz. Burada, çizgiye dikkat edin,

 if(Car.this.carType.equals("4WD")) (… )

thisDış sınıfın carType değişkenine erişmek için anahtar kelimeyi kullanıyoruz . Sen kullanmak yerine fark etmiş olabilirsiniz this.carTypebiz kullandık Car.this.carType.

Çünkü dış sınıf Car'ın isminden bahsetmemiş olsaydık, thisanahtar kelime iç sınıfın içindeki üyeyi temsil eder.

Benzer şekilde, dış sınıfın yöntemine de iç sınıftan erişiyoruz.

 if (Car.this.getCarName().equals("Crysler") (… )

getCarName()Bir privateyöntem olmasına rağmen, ona iç sınıftan erişebildiğimizi not etmek önemlidir .

Statik İç İçe Sınıf

Java'da, staticbaşka bir sınıfın içinde de bir sınıf tanımlayabiliriz . Böyle bir sınıf olarak bilinir static nested class. Statik iç içe geçmiş sınıflar, statik iç sınıflar olarak adlandırılmaz.

İç sınıfın aksine, iç içe yerleştirilmiş statik bir sınıf, dış sınıfın üye değişkenlerine erişemez. Bunun nedeni, statik iç içe geçmiş sınıfın , dış sınıfın bir örneğini oluşturmanızı gerektirmemesidir.

 OuterClass.NestedClass obj = new OuterClass.NestedClass();

Burada, sadece dış sınıfın sınıf adını kullanarak statik iç içe geçmiş sınıfın bir nesnesini oluşturuyoruz . Bu nedenle, dış sınıfa kullanılarak başvurulamaz OuterClass.this.

Örnek 3: Statik İç Sınıf

 class MotherBoard ( // static nested class static class USB( int usb2 = 2; int usb3 = 1; int getTotalPorts()( return usb2 + usb3; ) ) ) public class Main ( public static void main(String() args) ( // create an object of the static nested class // using the name of the outer class MotherBoard.USB usb = new MotherBoard.USB(); System.out.println("Total Ports = " + usb.getTotalPorts()); ) )

Çıktı :

 Toplam Bağlantı Noktası = 3

Yukarıdaki programda MotherBoard sınıfı içerisinde USB isimli statik bir sınıf oluşturduk. Çizgiye dikkat edin,

 MotherBoard.USB usb = new MotherBoard.USB();

Burada, dış sınıfın adını kullanarak bir USB nesnesi oluşturuyoruz.

Şimdi, dış sınıfın üyelerine erişmeye çalışırsanız ne olacağını görelim:

Örnek 4: Statik İç Sınıf içinde Outer sınıfının üyelerine erişim

 class MotherBoard ( String model; public MotherBoard(String model) ( this.model = model; ) // static nested class static class USB( int usb2 = 2; int usb3 = 1; int getTotalPorts()( // accessing the variable model of the outer classs if(MotherBoard.this.model.equals("MSI")) ( return 4; ) else ( return usb2 + usb3; ) ) ) ) public class Main ( public static void main(String() args) ( // create an object of the static nested class MotherBoard.USB usb = new MotherBoard.USB(); System.out.println("Total Ports = " + usb.getTotalPorts()); ) )

Programı çalıştırmaya çalıştığımızda bir hata alacağız:

 hata: statik olmayan değişken, buna statik bir bağlamdan başvurulamaz

This is because we are not using the object of the outer class to create an object of the inner class. Hence, there is no reference to the outer class Motherboard stored in Motherboard.this.

Key Points to Remember

  • Java treats the inner class as a regular member of a class. They are just like methods and variables declared inside a class.
  • Since inner classes are members of the outer class, you can apply any access modifiers like private, protected to your inner class which is not possible in normal classes.
  • Since the nested class is a member of its enclosing outer class, you can use the dot (.) notation to access the nested class and its members.
  • Using the nested class will make your code more readable and provide better encapsulation.
  • Statik olmayan iç içe geçmiş sınıflar (iç sınıflar), özel olarak bildirilmiş olsalar bile, dış / çevreleyen sınıfın diğer üyelerine erişime sahiptir.

Ilginç makaleler...