Sobes.tech
Middle

Programlama dilinde iç içe sınıfların türleri nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da iç içe sınıflar:

  1. Statik İç İçe Sınıflar (Static Nested Classes): Normal statik sınıf üyeleri gibi davranırlar. Dış sınıfın statik olmayan üyelerine erişimleri yoktur. Dış sınıf örneği olmadan oluşturulurlar.

    public class Outer {
        private static String staticMsg = "Statik mesaj";
        private String instanceMsg = "Örnek mesaj";
    
        static class StaticNested {
            void displayStatic() {
                // Dış sınıfın statik üyelerine erişim
                System.out.println(staticMsg);
                // Dış sınıfın statik olmayan üyelerine erişim yok
                // System.out.println(instanceMsg); // Derleme hatası
            }
        }
    }
    
  2. İç Sınıflar (Inner Classes): Dış sınıf örneği ile ilişkilidir. Tüm (statik ve statik olmayan) üyelerine, özel üyeler dahil olmak üzere, tam erişime sahiptir. private, protected, package-private veya public olarak bildirilebilir.

    public class Outer {
        private static String staticMsg = "Statik mesaj";
        private String instanceMsg = "Örnek mesaj";
    
        class Inner {
            void display() {
                // Dış sınıfın statik ve statik olmayan üyelerine erişim
                System.out.println(staticMsg);
                System.out.println(instanceMsg);
            }
        }
    }
    
  3. Yerel Sınıflar (Local Classes): Bir blok (metot, yapıcı veya statik başlatıcı) içinde tanımlanır. Sadece bu blok içinde kullanılabilir. final veya etkili final olan yerel değişkenlere ve parametrelere, ayrıca dış sınıfın tüm üyelerine erişebilirler.

    public class Outer {
        private String instanceMsg = "Örnek mesaj";
    
        void methodWithLocalClass() {
            final String localVar = "Yerel değişken"; // veya etkili `final`
    
            class Local {
                void display() {
                    System.out.println(instanceMsg);
                    System.out.println(localVar);
                }
            }
    
            Local localObj = new Local();
            localObj.display();
        }
    }
    
  4. Anonim Sınıflar (Anonymous Classes): İsimsiz yerel sınıflardır. Bir sınıfı tanımlayıp örneğini oluşturmak için kullanılırlar, ya bir arayüzü uygular ya da bir sınıfı genişletirler. Küçük ve tek kullanımlık nesneler oluşturmak için uygundur.

    public class Outer {
        void methodWithAnonymousClass() {
            // Runnable arayüzünü uygulayan anonim sınıf
            Runnable myRunnable = new Runnable() {
                @Override
                public void run() {
                    System.out.println("Anonim sınıftan çalıştırılıyor");
                }
            };
            new Thread(myRunnable).start();
    
            // Thread sınıfını genişleten anonim sınıf
            Thread myThread = new Thread() {
                @Override
                public void run() {
                    System.out.println("Thread genişleten anonim sınıftan çalıştırılıyor");
                }
            };
            myThread.start();
        }
    }
    

İç içe sınıf türlerinin karşılaştırması:

Sınıf Türü Deklarasyon Yeri Dış sınıfın üyelerine erişim Oluşturmak için dış sınıf örneğine ihtiyaç var mı? Erişim belirteçleri
Statik iç içe sınıf Sınıf içinde, static anahtar kelimesi ile. Sadece statiklere. Hayır Tümleri
İç sınıf Statik olmayan, sınıf içinde. Tümüne (statik ve olmayan). Evet Tümleri
Yerel sınıf Metot, yapıcı veya statik başlatıcı içindeki blokta. Tüm dış sınıf üyelerine + final veya etkili final yerel değişkenlere. Evet Hayır (final veya abstract varsayılan)
Anonim sınıf Bir blok içinde (ifade). Tüm dış sınıf üyelerine + final veya etkili final yerel değişkenlere. Evet Hayır