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);
            // Ներքին անդամներ ուղիղ հասանելի չեն
            // 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 Չի օգտագործվում
Մուտք դեպի արտաքին դասի անդամներ Միայն ստատիկ անդամներ Բոլորը
Արտաքին դասի օրինակով ստեղծում Չի անհրաժեշտ Անհրաժեշտ
Կապ արտաքին դասի օրինակին Չի Այո