Sobes.tech
Middle

Wanneer moet je een interface gebruiken en wanneer een abstracte klasse?

sobes.tech AI

Antwoord van AI

We gebruiken een abstracte klasse om basisfunctionaliteit en algemene toestand te creëren die door subklassen kunnen worden geërfd. Het is geschikt wanneer er gemeenschappelijke methoden met implementatie en methoden die overschreven moeten worden. De abstracte klasse kan velden en constructeurs bevatten.

// Abstracte klasse
abstract class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    abstract void makeSound(); // Abstracte methode

    void eat() { // Methode met implementatie
        System.out.println(name + " eet.");
    }
}

We gebruiken een interface om een contract te definiëren dat een reeks methoden beschrijft die door klassen moeten worden geïmplementeerd. Het is geschikt voor het bereiken van meervoudig gedrag (meervoudige functionaliteit erfenis). De interface kan geen toestand (instantievelden, behalve constanten) en geen constructors bevatten (voor Java 8).

// Interface
interface Flyable {
    void fly(); // Abstracte methode
}

Vergelijkingstabel van verschillen:

Kenmerk Abstracte klasse Interface
Type leden Velden, abstracte en concrete methoden, constructors Constanten, abstracte methoden (standaard), statische en default methoden (sinds Java 8)
Implementatie van methoden Kan methoden met implementatie bevatten Alleen abstracte methoden tot Java 8, vanaf Java 8 - static en default
Toestand Kan toestand hebben (velden) Kan geen toestand hebben (instantievelden)
Overerving Enkelvoudige overerving Meervoudige implementatie
Gebruik "is-a" - basistype "has-a" - gedragscontract