Middle
Wat zijn de verschillen tussen geneste (nested) en interne (inner) klassen in Java?
sobes.tech AI
Antwoord van AI
-
Geneste klasse (Nested classes): Statische leden van de externe klasse. Hebben geen directe toegang tot de niet-statische leden (velden en methoden) van de externe klasse, alleen via een instantie van de externe klasse. Worden gedeclareerd met het sleutelwoord
static. -
Binnenklassen (Inner classes): Niet-statische leden van de externe klasse. Hebben volledige toegang tot alle leden (statisch en niet-statisch) van de externe klasse, inclusief privéleden. Om een instantie van een binnenklasse te maken, is een instantie van de externe klasse nodig. Ze gebruiken niet het sleutelwoord
static.
Voorbeeld:
// Externe klasse
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statische geneste klasse
static class StaticNestedClass {
void display() {
// Alleen toegang tot statische leden van de externe klasse
System.out.println("Statische geneste klasse: " + staticOuterField);
// Geen directe toegang tot outerField
// System.out.println(outerField); // Compileerfout
}
}
// Niet-statische binnenklasse
class InnerClass {
void display() {
// Toegang tot alle leden van de externe klasse
System.out.println("Binnen: " + outerField);
System.out.println("Binnen (statisch): " + staticOuterField);
}
}
}
// Gebruik
public class Main {
public static void main(String[] args) {
// Maak een instantie van de statische geneste klasse
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Maak een instantie van de binnenklasse vereist een instantie van de externe klasse
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Kenmerk | Geneste klasse (Nested Class) | Binnenklasse (Inner Class) |
|---|---|---|
| Sleutelwoord | static |
Nee |
| Toegang tot leden van de externe klasse | Alleen statisch | Alles |
| Vereist een instantie van de externe klasse om een instantie te maken | Nee | Ja |
| Verbinding met de instantie van de externe klasse | Nee | Ja |