Sobes.tech
Middle

Фарқият байни синфҳои дарунсохт (nested) ва дохилӣ (inner) дар Java чист?

sobes.tech AI

Ҷавоб аз AI

  • Класи вътре (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 Не
Достъп до членове на външния клас Само статични Всички
Изисква екземпляр на външния клас за създаване Не Да
Връзка с екземпляра на външния клас Не Да