Welke soorten geneste klassen zijn er in programmeertalen?
sobes.tech AI
Antwoord van AI
Geneste klasse in Java:
-
Statische geneste klassen (Static Nested Classes): Gedragen zich als gewone statische leden van de klasse. Hebben geen toegang tot niet-statische leden van de externe klasse. Worden gemaakt zonder instantie van de externe klasse.
public class Outer { private static String staticMsg = "Static message"; private String instanceMsg = "Instance message"; static class StaticNested { void displayStatic() { // Toegang tot statische leden van de externe klasse System.out.println(staticMsg); // Geen toegang tot niet-statische leden van de externe klasse // System.out.println(instanceMsg); // Compileerfout } } } -
Binnenklassen (Inner Classes): Gelieerd aan een instantie van de externe klasse. Hebben volledige toegang tot alle (static en non-static) leden van de externe klasse, inclusief privé. Kunnen worden gedeclareerd als
private,protected,package-privateofpublic.public class Outer { private static String staticMsg = "Static message"; private String instanceMsg = "Instance message"; class Inner { void display() { // Toegang tot statische en niet-statische leden van de externe klasse System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
Lokale klassen (Local Classes): Worden gedeclareerd binnen een blok (methode, constructor of statische initialisator). Alleen beschikbaar binnen dat blok. Kunnen verwijzen naar
finalof effectieffinallokale variabelen en parameters van het blok, evenals alle leden van de externe klasse.public class Outer { private String instanceMsg = "Instance message"; void methodWithLocalClass() { final String localVar = "Local variable"; // of effectief final class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
Anonieme klassen (Anonymous Classes): Zijn lokale klassen zonder naam. Worden gebruikt voor het gelijktijdig declareren en maken van een instantie van een klasse die ofwel een interface implementeert of een klasse uitbreidt. Handig voor het maken van kleine, eenmalige objecten.
public class Outer { void methodWithAnonymousClass() { // Anonieme klasse die interface Runnable implementeert Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Running from anonymous class"); } }; new Thread(myRunnable).start(); // Anonieme klasse die klasse Thread uitbreidt Thread myThread = new Thread() { @Override public void run() { System.out.println("Running from anonymous class extending Thread"); } }; myThread.start(); } }
Vergelijking van de verschillende soorten geneste klassen:
| Klasse type | Plaats van declaratie | Toegang tot leden van de externe klasse | Is een instantie van de externe klasse nodig voor creatie | Toegangsmodificatoren |
|---|---|---|---|---|
| Statische geneste klasse | Binnen de klasse, met het sleutelwoord static. |
Alleen tot statische leden. | Nee | Alle |
| Binnenklasse (Inner) | Binnen de klasse (niet-statisch). | Tot alle (statische en niet-statische) leden. | Ja | Alle |
| Lokale klasse | Binnen een blok (methoden, constructors, initialisatoren). | Tot alle leden van de externe klasse + final of effectief final lokale variabelen en parameters. |
Ja | Nee (final of abstract impliciet) |
| Anonieme klasse | Binnen een blok (uitdrukking). | Tot alle leden van de externe klasse + final of effectief final lokale variabelen en parameters. |
Ja | Nee |