Sobes.tech
Middle

Aké druhy vnorených tried existujú?

sobes.tech AI

Odpoveď od AI

Statické vnorené triedy a vnorené triedy (nestatické vnorené triedy).

  • Statické vnorené triedy:

    • Vyhlasujú sa kľúčovým slovom static.
    • Majú prístup iba k statickým členom (poliam a metódam) vonkajšej triedy, vrátane súkromných.
    • Nemajú priame prístup k nestatickým členom vonkajšej triedy.
    • Môžu byť vytvorené bez inštancie vonkajšej triedy.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        static class StaticNested {
            void display() {
                System.out.println("Statická premenná: " + staticVar);
                // System.out.println("Inštančná premenná: " + instanceVar); // Chyba kompilácie
            }
        }
    }
    
  • Vnorené triedy (nestatické vnorené triedy):

    • Vyhlasujú sa bez kľúčového slova static.
    • Majú plný prístup ku všetkým členom (statickým aj nestatickým) vonkajšej triedy, vrátane súkromných.
    • Nemôžu obsahovať statické členy (polia alebo metódy), okrem konečných konštánt.
    • Vyžadujú inštanciu vonkajšej triedy na ich vytvorenie.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        class Inner {
            void display() {
                System.out.println("Statická premenná: " + staticVar);
                System.out.println("Inštančná premenná: " + instanceVar);
            }
        }
    }
    
  • Lokálne triedy:

    • Vyhlasujú sa v rámci metód, konštruktorov alebo inicializačných blokov.
    • Majú prístup ku všetkým konečným a efektívne konečným lokálnym premenným, ako aj k členom vonkajšej triedy, v ktorej sú definované.
    • Ich oblasť viditeľnosti je obmedzená na blok, v ktorom sú deklarované.
    class Outer {
        void myMethod() {
            final int localVar = 5; // Efektívne final
    
            class LocalInner {
                void display() {
                    System.out.println("Lokálna premenná: " + localVar);
                }
            }
    
            LocalInner local = new LocalInner();
            local.display();
        }
    }
    
  • Neklasové triedy (anonymous classes):

    • Bez mena.
    • Sú vytvárané a inštancované súčasne.
    • Často sa používajú na implementáciu rozhraní alebo rozšírenie tried.
    interface MyInterface {
        void doSomething();
    }
    
    class Outer {
        void myMethod() {
            MyInterface anon = new MyInterface() {
                @Override
                public void doSomething() {
                    System.out.println("Robí niečo anonymne.");
                }
            };
            anon.doSomething();
        }
    }
    

Hlavné rozdiely medzi statickými vnorenými triedami a vnorenými triedami:

Charakteristika Statická vnorená trieda Vnorená trieda
Kľúčové slovo static Není prítomné
Prístup k členom Iba k statickým členom vonkajšej triedy Všetky členy vonkajšej triedy
Vytvorenie inštancie Bez inštancie vonkajšej triedy Vyžaduje sa inštancia vonkajšej triedy