Junior
Wat betekenen de relaties "ben" en "heb" in objectgeoriënteerd programmeren?
sobes.tech AI
Antwoord van AI
De relatie "is-een" (is-a) is overerving. De afgeleide klasse "is" een ouderklasse en erft zijn eigenschappen en gedrag.
// Ouderklasse
class Animal {
void eat() {
System.out.println("Dier eet");
}
}
// Afgeleide klasse
class Dog extends Animal {
void bark() {
System.out.println("Hond blaft");
}
}
In dit voorbeeld "is" Dog Animal.
De relatie "hebben" (has-a) is compositie of aggregatie. Een object "heeft" een verwijzing naar een ander object als onderdeel van zijn toestand.
class Engine {
void start() {
System.out.println("Motor gestart");
}
}
class Car {
private Engine engine; // Auto "heeft" een motor
public Car() {
this.engine = new Engine();
}
void drive() {
engine.start();
System.out.println("Auto rijdt");
}
}
Hier "heeft" Car Engine. Compositie impliceert een sterke relatie (de levenscyclus van het inhoudende object hangt af van het omringende object), aggregatie is zwakker (objecten kunnen onafhankelijk bestaan). Het voorbeeld toont compositie.
Belangrijke verschillen:
- "Is-een" (
is-a) — overerving, definieert een hiërarchie van typen. - "Hebben" (
has-a) — compositie/aggregatie, definieert de structuur van het object door het opnemen van andere objecten.