Junior
Welke soorten klassen zijn er in Java?
sobes.tech AI
Antwoord van AI
In Java zijn de volgende hoofdtypen klassen:
-
Standaardklasse (Standard Class)
- Kan velden, methoden, constructors bevatten.
- Kan door andere klassen worden overerfd, tenzij ze als
finalzijn gedeclareerd. - Kan interfaces implementeren.
- Wordt gedeclareerd met toegangsspecificaties (
public,protected,default,private).
-
Abstracte klasse (Abstract Class)
- Wordt gedeclareerd met het sleutelwoord
abstract. - Kan niet direct worden geïnstantieerd.
- Kan abstracte methoden (zonder implementatie) en gewone methoden bevatten.
- Is bedoeld voor overerving; subklassen moeten de abstracte methoden implementeren.
// Abstracte klasse voor een vorm abstract class Shape { abstract double area(); // Abstracte methode voor het berekenen van de oppervlakte void display() { // Gewone methode System.out.println("Dit is een vorm."); } } - Wordt gedeclareerd met het sleutelwoord
-
Finale klassen (Final Class)
- Worden gedeclareerd met het sleutelwoord
final. - Kan niet door andere klassen worden uitgebreid.
- Wordt gebruikt om uitbreiding van de klasse te voorkomen, veiligheid te garanderen of ongewijzigde implementatie te verzekeren.
// Finale klasse die niet kan worden uitgebreid final class ImmutableString { private final String value; public ImmutableString(String value) { this.value = value; } public String getValue() { return value; } } - Worden gedeclareerd met het sleutelwoord
-
Enumeraties (Enum)
- Een speciaal type klasse, bedoeld om een vaste set constanten te vertegenwoordigen.
- Wordt gedeclareerd met het sleutelwoord
enum. - Enum-constanten zijn standaard
public static final. - Kan velden, methoden en constructors hebben (met een verborgen
privatemodifier).
// Enum voor de dagen van de week enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } -
Anonieme klassen (Anonymous Class)
- Klassen zonder naam, die gelijktijdig worden gemaakt en geïnstantieerd.
- Vaak gebruikt voor het implementeren van interfaces of het uitbreiden van klassen "on the fly" wanneer een eenmalig gebruik vereist is.
- Kan geen expliciete constructors hebben.
// Aanmaken van een anonieme klasse die de interface Runnable implementeert Runnable r = new Runnable() { @Override public void run() { System.out.println("Uitvoeren in een anonieme klasse."); } }; -
Geneste klassen (Nested Class)
- Klassen die binnen een andere klasse worden gedeclareerd.
- Er zijn twee types:
- Statische geneste klassen (Static Nested Class): gedeclareerd met
static. Hebben geen directe toegang tot niet-statische leden van de buitenklasse. Worden als gewone klassen geïnstantieerd. - Binnenklassen (Inner Class): niet gedeclareerd met
static. Hebben toegang tot alle leden van de buitenklasse, inclusiefprivate. Vereisen een instantie van de buitenklasse om te worden gemaakt.
- Statische geneste klassen (Static Nested Class): gedeclareerd met
// Buitenklasse class OuterClass { private String outerField = "Outer"; // Statische geneste klasse static class StaticNestedClass { void display() { System.out.println("Binnen StaticNestedClass."); // Geen directe toegang tot outerField } } // Binnenklasse class InnerClass { void display() { System.out.println("Binnen InnerClass. outerField: " + outerField); // Toegang tot outerField } } } -
Record-klassen (Record - vanaf Java 14)
- Gedeclareerd met het sleutelwoord
record. - Gericht op het opslaan van gegevens. De compiler genereert automatisch de constructor, toegangsmethoden (
accessor methods),equals(),hashCode()entoString(). - Velden van records zijn impliciet
final.
// Record voor het voorstellen van een punt in 2D-ruimte record Point(int x, int y) { // De compiler genereert de constructor, methods x(), y(), equals(), hashCode(), toString() } - Gedeclareerd met het sleutelwoord