Sobes.tech
Middle

Aké sú rozdiely medzi vnorenými (nested) a vnútornými (inner) triedami v Jave?

sobes.tech AI

Odpoveď od AI

  • Vnútorné triedy (Nested classes): Statické členy vonkajšej triedy. Nemajú priamy prístup k nestatickým členom (poliam a metódam) vonkajšej triedy, iba cez inštanciu vonkajšej triedy. Vyhlasujú sa kľúčovým slovom static.

  • Vnútorné triedy (Inner classes): Nestatické členy vonkajšej triedy. Majú úplný prístup ku všetkým členom (statickým aj nestatickým) vonkajšej triedy, vrátane súkromných. Na vytvorenie inštancie vnútorné triedy je potrebná inštancia vonkajšej triedy. Nepoužívajú kľúčové slovo static.

Príklad:

// Vonkajšia trieda
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Statická vnútorná trieda
    static class StaticNestedClass {
        void display() {
            // Prístup iba k statickým členom vonkajšej triedy
            System.out.println("Static nested: " + staticOuterField);
            // Priamy prístup k outerField nie je možný
            // System.out.println(outerField); // Kompilátorská chyba
        }
    }

    // Nestatická vnútorná trieda
    class InnerClass {
        void display() {
            // Prístup ku všetkým členom vonkajšej triedy
            System.out.println("Inner: " + outerField);
            System.out.println("Inner (static): " + staticOuterField);
        }
    }
}

// Použitie
public class Main {
    public static void main(String[] args) {
        // Vytvorenie inštancie statickej vnútorné triedy
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Vytvorenie inštancie vnútorné triedy vyžaduje inštanciu vonkajšej triedy
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Vlastnosť Vnútorná trieda (Nested Class) Vnútorná trieda (Inner Class)
Kľúčové slovo static Nie
Prístup k členom vonkajšej triedy Iba statické Všetky
Vyžaduje inštanciu vonkajšej triedy na vytvorenie inštancie Nie Áno
Väzba na inštanciu vonkajšej triedy Nie Áno