Sobes.tech
Middle

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

sobes.tech AI

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

Կայքային ներքին դասեր և ոչ կայքային (նստական) ներքին դասեր:

  • Կայքային ներքին դասեր:

    • Դեկլարարվում են static բանալի բառով:
    • Հասանելի են միայն արտաքին դասի կայքային անդամներին (գոտիներ և մեթոդներ), ներառյալ մասնավորները:
    • Չեն ունենա ուղիղ հասանելիություն արտաքին դասի ոչ կայքային անդամներին:
    • Կարող են ստեղծվել առանց արտաքին դասի օրինակ ունենալու:
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        static class StaticNested {
            void display() {
                System.out.println("Կայքային փոփոխական: " + staticVar);
                // System.out.println("Նմուշային փոփոխական: " + instanceVar); // Կոմպիլյացիայի սխալ
            }
        }
    }
    
  • Ներքին դասեր (նստական չհաշված):

    • Դեկլարարվում են առանց static բանալի բառի:
    • Ունեն լիարժեք հասանելիություն բոլոր անդամներին (կայքային և ոչ կայքային) արտաքին դասի, ներառյալ մասնավորները:
    • Չեն կարող պարունակել կայքային անդամներ (գոտիներ կամ մեթոդներ), բացի վերջնական հաստատուններից:
    • Պահանջվում է արտաքին դասի օրինակ՝ ստեղծելու համար:
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        class Inner {
            void display() {
                System.out.println("Կայքային փոփոխական: " + staticVar);
                System.out.println("Նմուշային փոփոխական: " + instanceVar);
            }
        }
    }
    
  • Տեղական դասեր:

    • Դեկլարարվում են մեթոդների, կոնստրուկտորների կամ ինիցիալիզացիոն բլոկների ներսում:
    • Հասանելի են բոլոր վերջնական և արդյունավետ վերջնական տեղական փոփոխականներին, ինչպես նաև արտաքին դասի անդամներին, որտեղ նրանք սահմանված են:
    • Դրանց տեսանելիության տարածքը սահմանափակ է այն բլոկով, որտեղ հայտարարվել են:
    class Outer {
        void myMethod() {
            final int localVar = 5; // Էֆեկտիվ վերջնական
    
            class LocalInner {
                void display() {
                    System.out.println("Տեղական փոփոխական: " + localVar);
                }
            }
    
            LocalInner local = new LocalInner();
            local.display();
        }
    }
    
  • Անանուն դասեր:

    • Անուն չունեցող տեղական դասեր:
    • Ստեղծվում և.instantly ստեղծվում են միաժամանակ:
    • Հաճախ օգտագործվում են ինտերֆեյսների կամ դասերի ընդլայնման համար:
    interface MyInterface {
        void doSomething();
    }
    
    class Outer {
        void myMethod() {
            MyInterface anon = new MyInterface() {
                @Override
                public void doSomething() {
                    System.out.println("Անանուն մի բան անում է.");
                }
            };
            anon.doSomething();
        }
    }
    

Հիմնական տարբերությունները կայքային և ոչ կայքային (նստական) ներքին դասերի միջև:

Գծագիր Կայքային ներքին դաս Նստական (ոչ կայքային) ներքին դաս
Բանալի բառ static Չկա
Հասանելիություն Միայն արտաքին դասի կայքային անդամներին Բոլոր անդամներին արտաքին դասի
Օբյեկտի ստեղծում Բացակայում է արտաքին դասի օբյեկտից Պահանջվում է արտաքին դասի օբյեկտ