Sobes.tech
Middle

Java'da iç içe (nested) sınıflar ile iç sınıflar (inner) arasındaki farklar nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

  • İç içe sınıflar (Nested classes): Dış sınıfın statik üyeleri. Dış sınıfın statik olmayan üyelerine (alanlar ve metodlar) doğrudan erişimleri yoktur, sadece dış sınıfın örneği aracılığıyla erişebilirler. static anahtar kelimesiyle tanımlanırlar.

  • İç sınıflar (Inner classes): Dış sınıfın statik olmayan üyeleri. Dış sınıfın tüm üyelerine (statik ve statik olmayanlar) tam erişime sahiptirler, hatta özel üyeler de dahil. Bir iç sınıfın örneğini oluşturmak için dış sınıfın bir örneğine ihtiyaç vardır. static anahtar kelimesini kullanmazlar.

Örnek:

// Dış sınıf
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Statik iç içe sınıf
    static class StaticNestedClass {
        void display() {
            // Sadece dış sınıfın statik üyelerine erişim
            System.out.println("Statik iç içe: " + staticOuterField);
            // outerField'a doğrudan erişim yok
            // System.out.println(outerField); // Derleme hatası
        }
    }

    // İç sınıf
    class InnerClass {
        void display() {
            // Tüm dış sınıf üyelerine erişim
            System.out.println("İç: " + outerField);
            System.out.println("İç (statik): " + staticOuterField);
        }
    }
}

// Kullanım
public class Main {
    public static void main(String[] args) {
        // Statik iç içe sınıf örneği oluşturma
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // İç sınıf örneği oluşturmak için dış sınıf örneği gerekir
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Özellik İç içe sınıf (Nested Class) İç sınıf (Inner Class)
Anahtar kelime static Hayır
Dış sınıfın üyelerine erişim Sadece statik üyeler Tüm üyeler
Bir dış sınıf örneği olmadan iç sınıf örneği oluşturulabilir mi? Hayır Evet
Dış sınıf örneği ile bağlantı Hayır Evet