Sobes.tech
Middle

Welke soorten geneste klassen bestaan er?

sobes.tech AI

Antwoord van AI

Statische genesteerde klassen en interne klassen (niet-statische genesteerde klassen).

  • Statische genesteerde klassen:

    • Worden gedeclareerd met het sleutelwoord static.
    • Hebben alleen toegang tot de statische leden (velden en methoden) van de externe klasse, inclusief private.
    • Hebben geen directe toegang tot de niet-statische leden van de externe klasse.
    • Kunnen worden geïnstantieerd zonder een instantie van de externe klasse.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        static class StaticNested {
            void display() {
                System.out.println("Statische variabele: " + staticVar);
                // System.out.println("Instantie variabele: " + instanceVar); // Compileerfout
            }
        }
    }
    
  • Interne klassen (niet-statische geneste klassen):

    • Worden gedeclareerd zonder het sleutelwoord static.
    • Hebben volledige toegang tot alle leden (statisch en niet-statisch) van de externe klasse, inclusief private.
    • Kunnen geen statische leden bevatten (velden of methoden), behalve finale constanten.
    • Vereisen een instantie van de externe klasse voor hun creatie.
    class Outer {
        private static int staticVar = 10;
        private int instanceVar = 20;
    
        class Inner {
            void display() {
                System.out.println("Statische variabele: " + staticVar);
                System.out.println("Instantie variabele: " + instanceVar);
            }
        }
    }
    
  • Lokale klassen:

    • Worden gedeclareerd binnen methoden, constructors of initialisatieblokken.
    • Hebben toegang tot alle finale en effectief finale lokale variabelen, evenals tot de leden van de externe klasse waarin ze zijn gedefinieerd.
    • Hun bereik is beperkt tot het blok waarin ze zijn gedeclareerd.
    class Outer {
        void myMethod() {
            final int localVar = 5; // Effectief final
    
            class LocalInner {
                void display() {
                    System.out.println("Lokale variabele: " + localVar);
                }
            }
    
            LocalInner local = new LocalInner();
            local.display();
        }
    }
    
  • Anonieme klassen:

    • Klassen zonder naam.
    • Worden gelijktijdig gemaakt en geïnstantieerd.
    • Worden vaak gebruikt om implementaties van interfaces te maken of klassen uit te breiden.
    interface MyInterface {
        void doSomething();
    }
    
    class Outer {
        void myMethod() {
            MyInterface anon = new MyInterface() {
                @Override
                public void doSomething() {
                    System.out.println("Iets anoniem doen.");
                }
            };
            anon.doSomething();
        }
    }
    

Belangrijkste verschillen tussen statische geneste klassen en interne klassen:

Kenmerk Statische geneste klasse Interne klasse
Sleutelwoord static Afwezig
Toegang tot leden Alleen tot statische leden van de Alle leden van de externe klasse
externe klasse
Instantie maken Zonder instantie van de externe klasse Vereist een instantie van de externe klasse
Statische leden Kunnen bevatten Kunnen geen bevatten (behalve constante)