Zoals je nu ongetwijfeld wel weet is inheritance het verschijnsel waarbij member functies en variabelen door ondergeschikte (derived) class worden overgenomen van een base class. Dit maakt een applicatie efficiënter, aangezien er minder code geschreven hoeft te worden geschreven om toch classes op te vullen.

Voordat je inheritance toepast, maak je vaak eerst een schets (ook wel een UML-diagram genoemd), waarbij je precies uittekent welke waarden een class heeft en hoe classes met elkaar kunnen worden gecombineerd om vervolgens een base class te vormen, waar derived classes waarden en functies van kunnen overnemen. Dit redeneren van ‘beneden (derived) naar boven (base)’ wordt ook wel generalization (generalisatie) genoemd.

In de tutorial over inheritance gebruikten we de GameObjects dieren en monsters in het populaire spel Minecraft als voorbeeld. We kunnen deze nu weer gebruiken. Laten we zeggen dat de Dieren-class de waarden m_gezondheid, m_snelheid en m_voedingswaarde bevat en dat de Monster-class de waarden m_gezondheid, m_snelheid en m_aanvalDamage bevat.

We zien hier dat de Dieren- en Monster-classes twee waarden delen: m_gezondheid en m_snelheid. In dit geval zou er een base class kunnen worden gemaakt, GameObject bijvoorbeeld, die de waarden m_gezondheid en m_snelheid doorgeeft aan de Monster- en Dieren-classes.

In dit voorbeeld zie je dat eerst de derived classes worden gemaakt en op basis hiervan de base class wordt gedefinieerd. Dit proces staat bekend als generalization, een goede manier om programma’s efficiënter te maken.

De redenering van ‘beneden naar boven’. Op basis van de waarden die overeenkomen in de Monster- en Dier-class, wordt de GameObject-class gevormd. De Dier- en Monster-class kunnen de overeenkomstige data nu overnemen van de GameObject-class, wat het programma efficiënter maakt (er zijn minder regels code vereist).