Ի՞նչ տեսակների ներքին դասեր կան ծրագրավորման լեզվում։
sobes.tech AI
Պատասխան AI-ից
Java- ի ներքին դասերը:
-
Ստատիկ ներքին դասեր (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); // Կոմպիլյացիոն սխալ } } } -
Ներքին դասեր (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); } } } -
Տեղական դասեր (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(); } } -
Անանուն դասեր (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 տեղական փոփոխականներ |
Այո | Ոչ |