Sobes.tech
Middle

Ի՞նչ տեսակների ներքին դասեր կան ծրագրավորման լեզվում։

sobes.tech AI

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

Java- ի ներքին դասերը:

  1. Ստատիկ ներքին դասեր (Static Nested Classes): Դրանք պահվում են որպես սովորական ստատիկ անդամներ։ Չեն ունենում մուտք դեպի արտաքին դասի ոչ-ստատիկ անդամներ։ Ստեղծվում են առանց արտաքին դասի օրինակ ունենալու։

    public class Outer {
        private static String staticMsg = "Ստատիկ հաղորդագրություն";
        private String instanceMsg = "Օրինակ հաղորդագրություն";
    
        static class StaticNested {
            void displayStatic() {
                // Մուտք դեպի արտաքին դասի ստատիկ անդամներ
                System.out.println(staticMsg);
                // Չեն ունենում մուտք դեպի արտաքին դասի ոչ-ստատիկ անդամներ
                // System.out.println(instanceMsg); // Կոմպիլյացիոն սխալ
            }
        }
    }
    
  2. Ներքին դասեր (Inner Classes): Կապված են արտաքին դասի օրինակին։ Ունեն լիարժեք մուտք բոլոր անդամներին (static և non-static), ներառյալ՝ մասնավորները։ Կարող են լինել private, protected, package-private կամ public։

    public class Outer {
        private static String staticMsg = "Ստատիկ հաղորդագրություն";
        private String instanceMsg = "Օրինակ հաղորդագրություն";
    
        class Inner {
            void display() {
                // Մուտք դեպի ստատիկ և ոչ-ստատիկ անդամներ
                System.out.println(staticMsg);
                System.out.println(instanceMsg);
            }
        }
    }
    
  3. Տեղական դասեր (Local Classes): Դրանք հայտարարում են բլոկի ներսում (մեթոդ, կոնստրուկտոր կամ ստատիկ ինիցիալիզատոր)։ Դրանք հասանելի են միայն այդ բլոկում։ Կարող են օգտվել final կամ արդյունավետ final տեղական փոփոխականներից և պարամետրերից, ինչպես նաև բոլոր արտաքին անդամներից։

    public class Outer {
        private String instanceMsg = "Օրինակ հաղորդագրություն";
    
        void methodWithLocalClass() {
            final String localVar = "Տեղական փոփոխական"; // կամ արդյունավետ final
    
            class Local {
                void display() {
                    System.out.println(instanceMsg);
                    System.out.println(localVar);
                }
            }
    
            Local localObj = new Local();
            localObj.display();
        }
    }
    
  4. Անանուն դասեր (Anonymous Classes): Դրանք անվան չունեցող տեղական դասեր են։ Օգտագործվում են միաժամանակ հայտարարելու և օրինակ ստեղծելու համար, որը կամ իրականացնում է ինտերֆեյս, կամ ընդլայնում է դաս։ Հարմար են փոքր, միանգամից օգտագործվող օբյեկտներ ստեղծելու համար։

    public class Outer {
        void methodWithAnonymousClass() {
            // Անանուն դաս, որը իրականացնում է Runnable ինտերֆեյսը
            Runnable myRunnable = new Runnable() {
                @Override
                public void run() {
                    System.out.println("Անանուն դասից աշխատում է");
                }
            };
            new Thread(myRunnable).start();
    
            // Անանուն դաս, որը ընդլայնում է Thread դասը
            Thread myThread = new Thread() {
                @Override
                public void run() {
                    System.out.println("Անանուն դաս, որը ընդլայնում է Thread");
                }
            };
            myThread.start();
        }
    }
    

Համեմատություն ներքին դասերի տեսակների միջև:

Տիպը Միջավայրի հայտարարում Մուտք դեպի արտաքին դասի անդամներ Անհրաժեշտ է արտաքին դասի օրինակ ստեղծել Մոդիֆիկատորներ
Ստատիկ ներքին դաս Դասի ներսում, static բանալիով Միայն ստատիկ անդամներ Ոչ Բոլորը
Ներքին դաս (Inner) Դասի ներսում (ոչ ստատիկ) Բոլոր (ստատիկ և ոչ-ստատիկ) Այո Բոլորը
Տեղական դաս (Local) Բլոկի ներսում (մեթոդ, կոնստրուկտոր, ինիցիալիզատոր) Բոլոր արտաքին անդամներ + final կամ արդյունավետ final տեղական փոփոխականներ Այո Ոչ (final կամ abstract ավտոմատ)
Անանուն դաս (Anonymous) Բլոկի ներսում (բայման) Բոլոր արտաքին անդամներ + final կամ արդյունավետ final տեղական փոփոխականներ Այո Ոչ