Sobes.tech
Junior

Ի՞նչ են ներքին դասերը։

sobes.tech AI

Պատասխան AI-ից

Ներքաշված դասերը (nested classes) այն դասերն են, որոնք հայտարարվում են այլ դասի ներսում: Դրանք կարող են լինել ստատիկ (static nested classes) կամ ոչ ստատիկ (inner classes):

Ստատիկ ներքաշված դասեր:

  • Հայտարարվում են static մոդիֆիկատորով:
  • Չեն ունենա ուղիղ մուտք արտաքին դասի ոչ ստատիկ անդամներին (միայն արտաքին դասի օրինակով):
  • Կարող են պարունակել ինչպես ստատիկ, այնպես էլ ոչ ստատիկ անդամներ:
  • Ստեղծվում են առանց արտաքին դասի օրինակ ունենալու:
public class Outer {
    private static int staticOuterVar = 10;
    private int instanceOuterVar = 20;

    public static class StaticNested {
        // Մուտք ունի staticOuterVar-ին
        public void printStaticValue() {
            System.out.println(staticOuterVar);
        }

        // Ուղիղ մուտք չունի instanceOuterVar-ին
        // public void printInstanceValue() {
        //     System.out.println(instanceOuterVar); // Կոմպիլյացիոն սխալ
        // }
    }
}

Օգտագործում՝

// Ստատիկ ներքաշված դասի օրինակ ստեղծելու համար
Outer.StaticNested nestedObject = new Outer.StaticNested();
 nestedObject.printStaticValue(); // Տպել 10

Ներքաշված ոչ ստատիկ դասեր (Inner Classes):

  • Հայտարարվում են առանց static մոդիֆիկատորի:
  • Ունեն ամբողջական մուտք դեպի արտաքին դասի բոլոր անդամներ, ներառյալ՝ մասնավորները:
  • Չեն կարող պարունակել ստատիկ անդամներ (բացառությամբ կոնստանտների):
  • Դրանք ստեղծելու համար անհրաժեշտ է արտաքին դասի օրինակ:
public class Outer {
    private static int staticOuterVar = 10;
    private int instanceOuterVar = 20;

    public class Inner {
        // Մուտք ունի staticOuterVar և instanceOuterVar
        public void printValues() {
            System.out.println(staticOuterVar); // Մուտք ունի
            System.out.println(instanceOuterVar); // Մուտք ունի
        }
    }
}

Ներքաշված ոչ ստատիկ դասի օրինակ ստեղծելու:

// Օրինակ՝ արտաքին դասի օրինակ ստեղծելով
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // Տպել 10 և 20

Ներքաշված դասերի օգտագործման առավելությունները:

  1. Հոգեկան խմբավորում: Միայն մեկ այլ դասով օգտագործվող դասերը կարելի է տրամաբանականորեն խմբավորել ներսում:
  2. Զտում և թաքցում: Ներքաշված դասերը ունեն մուտք դեպի արտաքին դասի մասնավոր անդամներ:
  3. Կոդի ընթեռնելիություն և սպասարկում: Կոդը ավելի կազմակերպված է:

Ներքաշված ոչ ստատիկ դասերի տեսակները:

  • Տեղական դասեր: Դեկլարարվում են մեթոդի ներսում:
  • Անանուն դասեր: Անուն չունեցող դասեր, որոնք սովորաբար օգտագործվում են՝
  • Աբստրակտ դասի, ինտերֆեյսի կամ բազային դասի օրինակ ստեղծելու համար՝ մեթոդների վերագրումներով:

Տեղական դաս:

public class Outer {
    public void myMethod() {
        class LocalClass {
            void display() {
                System.out.println("Տեղական դասի ներսում");
            }
        }
        LocalClass local = new LocalClass();
        local.display();
    }
}

Անանուն դաս (մոդելի հետ ինտերֆեյսի):

interface Greeting {
    void sayHello();
}

public class Outer {
    public void greet() {
        Greeting anonymousGreeting = new Greeting() {
            @Override
            public void sayHello() {
                System.out.println("Ողջույն անանուն դասից!");
            }
        };
        anonymousGreeting.sayHello();
    }
}