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 |