Middle
Kādi ir iekšējo klasu veidi?
sobes.tech AI
Atbilde no AI
Statiskās iekšējās un iekšējās (ne statiskās) klases.
-
Statiskās iekšējās klases:
- Tiek deklarētas ar atslēgvārdu
static. - Tiek piekļūts tikai statiskajiem locekļiem (laukiem un metodēm) ārējā klasē, ieskaitot privātos.
- Tieši nav piekļuves pie ne statiskajiem locekļiem ārējā klasē.
- Var tikt instanciētas bez ārējās klases objekta.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Statiskā mainīgā: " + staticVar); // System.out.println("Ne statiskā mainīgā: " + instanceVar); // Kompilācijas kļūda } } } - Tiek deklarētas ar atslēgvārdu
-
Iekšējās (ne statiskās) klases:
- Apzīmētas bez
staticatslēgvārda. - Tiek nodrošināta pilna piekļuve visiem locekļiem (statiskajiem un ne statiskajiem) ārējā klasē, ieskaitot privātos.
- Nevar saturēt statiskos locekļus (laukus vai metodes), izņemot galīgās konstantes.
- Prasa ārējās klases objekta esamību to izveidei.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Statiskā mainīgā: " + staticVar); System.out.println("Ne statiskā mainīgā: " + instanceVar); } } } - Apzīmētas bez
-
Vietējās (lokālās) klases:
- Apzīmētas metožu, konstruktoru vai inicializācijas bloku iekšpusē.
- Tiek nodrošināta piekļuve visiem galīgajiem un efektīvi galīgajiem vietējiem mainīgajiem, kā arī ārējās klases locekļiem, kurās tās ir definētas.
- To redzamības apjoms ir ierobežots ar to bloku, kurā tās ir definētas.
class Outer { void myMethod() { final int localVar = 5; // Efektīvi galīgs class LocalInner { void display() { System.out.println("Vietējais mainīgais: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Anonīmās klases:
- Bezvārdu vietējās klases.
- Tiek izveidotas un instanciētas uzreiz.
- Bieži tiek izmantotas interfeisu realizācijai vai klases paplašināšanai.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Darbojas kaut kas anonīmi."); } }; anon.doSomething(); } }
Galvenās atšķirības starp statiskajām iekšējām un iekšējām klasēm:
| Raksturojums | Statiskā iekšējā klase | Iekšējā klase |
|---|---|---|
| Atslēgvārds | static |
Nav |
| Piekļuve locekļiem | Tikai statiskajiem locekļiem no ārējās klases | Visu locekļu no ārējās klases |
| Objektu izveide | Bez ārējās klases objekta | Prasa ārējās klases objektu |
| Statiskie locekļi | Var saturēt | Nevar saturēt (izņemot konstantes) |