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 } } } - Worden gedeclareerd met het sleutelwoord
-
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); } } } - Worden gedeclareerd zonder het sleutelwoord
-
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) |