Middle
Milyen típusú beágyazott osztályok léteznek?
sobes.tech MI
Válasz az MI-től
Statikus beágyazott osztályok és belső osztályok (nem statikus beágyazott osztályok).
-
Statikus beágyazott osztályok:
- A
statickulcsszóval vannak deklarálva. - Csak a külső osztály statikus tagjaihoz (mezők és metódusok) férnek hozzá, beleértve a privátokat is.
- Nem férnek hozzá közvetlenül a külső osztály nem statikus tagjaihoz.
- Nélkülözhetetlen példány a külső osztályból.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Statikus változó: " + staticVar); // System.out.println("Példány változó: " + instanceVar); // Fordítási hiba } } } - A
-
Belső osztályok (nem statikus beágyazott osztályok):
- Nincs
statickulcsszóval deklarálva. - Teljes hozzáférésük van minden taghoz (statikus és nem statikus) a külső osztályban, beleértve a privátokat is.
- Nem tartalmazhatnak statikus tagokat (mezőket vagy metódusokat), kivéve a végleges konstansokat.
- Példányra van szükség a külső osztály példányából a létrehozáshoz.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Statikus változó: " + staticVar); System.out.println("Példány változó: " + instanceVar); } } } - Nincs
-
Helyi osztályok:
- Metódusok, konstruktorok vagy inicializáló blokkok belsejében vannak deklarálva.
- Minden végleges és effektív végleges helyi változóhoz, valamint a bennük meghatározott külső osztály tagjaihoz férnek hozzá.
- Láthatóságuk a deklarációs blokkra korlátozódik.
class Outer { void myMethod() { final int localVar = 5; // Effektív végleges class LocalInner { void display() { System.out.println("Helyi változó: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Névtelen osztályok:
- Nincs nevük.
- Egyidejűleg jönnek létre és példányosítják őket.
- Gyakran interfészek vagy osztályok kiterjesztésére használják.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Névtelenül csinál valamit."); } }; anon.doSomething(); } }
A statikus beágyazott osztályok és a belső osztályok közötti fő különbségek:
| Jellemző | Statikus beágyazott osztály | Belső osztály |
|---|---|---|
| Kulcsszó | static |
Nincs |
| Hozzáférés a tagokhoz | Csak a külső osztály statikus tagjai | Minden külső osztály tagja |
| Példányosítás | Külső osztály példánya nélkül | Külső osztály példánya szükséges |
| Statikus tagok | Tartalmazhatnak | Nem tartalmazhatnak (kivéve a konstansokat) |