Sobes.tech
Middle

Javaда ички (inner) жана ички (nested) класстар арасында кандай айырмачылык бар?

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 Жок
Чыгарган класстын мүчөлөрүнө кирүү Тек гана статикалык Бардык
Экземпляр түзүү үчүн талап Жок Ооба