Sobes.tech
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 static kulcsszó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
            }
        }
    }
    
  • Belső osztályok (nem statikus beágyazott osztályok):

    • Nincs static kulcsszó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);
            }
        }
    }
    
  • 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)