Sobes.tech
Middle

Koje su razlike između ugniježđenih (nested) i unutrašnjih (inner) klasa u Javi?

sobes.tech АИ

Одговор од АИ

  • Унутрашње класе (Nested classes): Статички чланови спољашње класе. Немају директан приступ нестатичким члановима (пољима и методама) спољашње класе, већ преко экземпляра спољашње класе. Објављују се кључном речи static.

  • Унутрашње класе (Inner classes): Нестатички чланови спољашње класе. Имају потпун приступ свим члановима (статичким и нестатичким) спољашње класе, укључујући приватне. За креирање экземпляра унутрашње класе потребан је экземпляр спољашње класе. Не користе кључну реч static.

Пример:

// Спољашња класа
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Статичка унутрашња класа
    static class StaticNestedClass {
        void display() {
            // Доступ само до статичких чланова спољашње класе
            System.out.println("Static nested: " + staticOuterField);
            // Нема директан приступ outerField
            // System.out.println(outerField); // Грешка компилације
        }
    }

    // Нестатичка унутрашња класа
    class InnerClass {
        void display() {
            // Доступ свим члановима спољашње класе
            System.out.println("Inner: " + outerField);
            System.out.println("Inner (static): " + staticOuterField);
        }
    }
}

// Коришћење
public class Main {
    public static void main(String[] args) {
        // Креирање экземпляра статичке унутрашње класе
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Креирање экземпляра унутрашње класе захтева экземпляр спољашње класе
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Особина Внутрашња класа (Nested Class) Унутрашња класа (Inner Class)
Кључна реч static Нема
Доступ до чланова спољашње класе Само статички Све
Потребан экземпляр спољашње класе за креирање Не Да
Веза са экземпляром спољашње класе Не Да