Stel je hebt spelelementen die veel functionaliteiten delen. Bijvoorbeeld zombies waarvan elk type een andere ability heeft. Nu is een groot deel van de functionaliteit hetzelfde. Ze bewegen, vallen de speler aan, kunnen schade krijgen, etc.
We willen niet meerdere scripts hebben met dezelfde code. Kan je je voorstellen dat er iets veranderd moet worden in de basis van de bewegingen? Je zal elk script door moeten pluizen om het punt te vinden waar je dit veranderd.
We willen ook niet één groot script hebben waarin alle abilties staan en de individuele zombies laten uitvogelen wat ze allemaal wel en niet kunnen. Zombies zijn dom, daar gaat op een gegeven moment iets mis.
Veel makkelijker is om de basisgedragingen van alle zombies te verzamelen in één script en de specifieke abilities in hun eigen scripts uit te breiden. Dit kan met inheritance.
Binnen Object Georiënteerd programmeren is overerven een manier om basisfunctionaliteit tussen klassen te delen. De base class zal al deze functionaliteit hebben en de child classes zullen dan allemaal minstens deze methods en variables hebben.
Als je inheritance goed toepast blijf je jezelf niet constant herhalen. Dat heeft weer als gevolg dat je code overzichtelijk bijft en je direct weet wat waar wordt gedaan. Dit heeft weer als gevolg dat aanpassingen en bugfixes veel sneller doorgevoerd kunnen worden.
Als je in Unity programmeert gebruik je stiekem al inheritance.

Zoals je wel hebt gemerkt hebben de classes die je aanmaakt methods als Update() en OnCollisionEnter() en attributes als transform en gameObject. Deze functionaliteit krijg je niet direct van Unity, je krijgt het specifiek omdat je inherit van MonoBehaviour.
De base class, ook wel ‘parent class’, is de class die alle standaard functionaliteit bevat. Denk hierbij aan bewegen, of schade nemen. De base class zelf doets niets unieks, maar dat is ook het idee. De base class wordt op dezelfde manier als een normale class aangemaakt
Een class die van een andere class inherit noemen we een child class. Eigenlijk zijn alle functies die je voor Unity schrijft dus child classes. Children kunnen zelf ook parents worden.
De child class kan alles wat de parent ook kan en de dingen die specifiek voor dit kind zijn. Methods en attributes die de parent ook heeft hoeven niet herhaald te worden. In dat geval is die method identiek aan die van de parent class.
Je maakt een child class aan door MonoBehaviour te vervangen met de naam van de parent in de declaratie.
