Kādi ir iekšējo klasu veidi programmēšanas valodā?
sobes.tech AI
Atbilde no AI
Java iekšējās klases:
-
Statiskās iekšējās klases (Static Nested Classes): Uzvedas kā parasti statiskie klases locekļi. Tām nav piekļuves ārējās klases nestatiskajiem locekļiem. Tās tiek izveidotas bez ārējās klases eksemplāra.
public class Outer { private static String staticMsg = "Statiska ziņa"; private String instanceMsg = "Instanču ziņa"; static class StaticNested { void displayStatic() { // Piekļuve ārējās klases statiskajiem locekļiem System.out.println(staticMsg); // Nav piekļuves ārējās klases nestatiskajiem locekļiem // System.out.println(instanceMsg); // Kompilācijas kļūda } } } -
Iekšējās klases (Inner Classes): Ir saistītas ar ārējās klases eksemplāru. Tām ir pilna piekļuve visiem (statiskajiem un nestatiskajiem) locekļiem, ieskaitot privātos. Tās var būt deklarētas kā
private,protected,package-privatevaipublic.public class Outer { private static String staticMsg = "Statiska ziņa"; private String instanceMsg = "Instanču ziņa"; class Inner { void display() { // Piekļuve statiskajiem un nestatiskajiem locekļiem System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
Vietējās klases (Local Classes): Deklarētas bloka iekšienē (metodā, konstruktora vai statiskajā inicializatorā). Tām ir piekļuve tikai šajā blokā. Tās var piekļūt
finalvai efektīvifinalvietējiem mainīgajiem un parametriem, kā arī visiem ārējiem locekļiem.public class Outer { private String instanceMsg = "Instanču ziņa"; void methodWithLocalClass() { final String localVar = "Vietējā mainīgā"; // vai efektīvi final class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
Anonīmās klases (Anonymous Classes): Bezvārdu vietējās klases. Tās tiek deklarētas un izveidotas vienlaikus, kas realizē interfeisu vai paplašina klasi. Tās ir noderīgas mazām, vienreizējām objektiem.
public class Outer { void methodWithAnonymousClass() { // Anonīma klase, kas realizē Runnable interfeisu Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Darbojas no anonīmās klases"); } }; new Thread(myRunnable).start(); // Thread klases paplašināšana ar anonīmu klasi Thread myThread = new Thread() { @Override public void run() { System.out.println("Darbojas no Thread paplašinātas anonīmās klases"); } }; myThread.start(); } }
Salīdzinājums starp iekšējām klasēm:
| Tips | Deklarācijas vieta | Pieeja ārējās klases locekļiem | Nepieciešams ārējās klases eksemplārs | Modifikatori |
|---|---|---|---|---|
| Statiskā iekšējā klase | Klases iekšpusē, ar static |
Tikai statiskajiem | Nē | Visi |
| Iekšējā klase (Inner) | Klases iekšpusē (ne statiskā) | Visu (statisko un nestatisko) | Jā | Visi |
| Vietējā klase | Bloka iekšpusē (metodā, konstruktors, inicializators) | Visu ārējo + final vai efektīvi final vietējo |
Jā | Nē |