Korte samenvatting
- Inheritance houdt in dat je gegevens van de ene class overhevelt naar de andere class.
- Een base class is een class die functies en variabelen bevat, die andere classes zouden kunnen overnemen.
- Een derived class is een ondergeschikte class die variabelen en functies overneemt van de base class en op zichzelf kan toepassen.
- Als je twee classes hebt die (een aantal) dezelfde functies/variabelen bevatten, kun je de overeenkomstige functies/variabelen plaatsen in een andere class (de base class), waar de twee classes (in dit geval de derived classes genoemd) functies en variabelen van kunnen overnemen.
![](https://www.jorcademy.nl/wp-content/uploads/2021/02/uml-inheritance.png)
Broncode
#include <iostream> /* GameObject Class */ class GameObject { public: void Lopen() { std::cout << "Object loopt met snelheid " << m_snelheid << std::endl; } protected: int m_gezondheid; float m_snelheid; }; /* Dier Class */ class Dier : public GameObject { public: Dier() { m_gezondheid = 5.0f; m_snelheid = 3.0f; } void Grazen() { std::cout << "Object graast." << std::endl; } private: }; /* Monster Class */ class Monster : public GameObject { public: Monster() { m_gezondheid = 10.0f; m_snelheid = 10.0f; } void Aanvallen() { std::cout << "Object valt aan." << std::endl; } private: }; /* Main */ int main(int argc, const char * argv[]) { Monster monster; Dier dier; /* In Monster gedefinieerde functie */ monster.Aanvallen(); /* In Dier gedefinieerde functie */ dier.Grazen(); /* In GameObject gedefinieerde functie */ monster.Lopen(); }
Huiswerk voor deze tutorial
Hoewel het voorbeeld in C++ is gegeven, kun je inheritance ook toepassen in Python. Als je Level 2 hebt afgerond, ken je de basis van deze programmeertaal. In de onderstaande code zijn de classes Persoon, Student en Professor gegeven.
# Base Class - Persoon class Persoon: def __init__(self, naam, leeftijd, geslacht): self.naam = naam self.leeftijd = leeftijd self.geslacht = geslacht def Info(self): print("Naam:", self.naam) print("Leeftijd:", self.leeftijd) print("Geslacht:", self.geslacht, "\n") # Derived Class - Student class Student(): def __init__(self, naam, leeftijd, geslacht, startJaar): self.startJaar = startJaar def PrintStartJaar(self): print(self.naam, "is begonnen met zijn studie in", str(self.startJaar) + ".\n") # Derived Class - Professor class Professor(): def __init__(self, naam, leeftijd, geslacht, studieRichting): self.studieRichting = studieRichting def PrintRichting(self): print("Prof.", self.naam, "geeft les in", self.studieRichting + ".\n")
Je ziet dat de Persoon-class de variabelen naam, leeftijd en geslacht bevat en dat die waarden worden geprint door de Info-functie. Je ziet dat de Student- en Professor-class deze waarden ook als parameters in de init-functie hebben zitten. Echter hebben deze waarden nog geen waarde.
- Zorg ervoor dat de waarde naam, leeftijd en geslacht door de Student- en Professor-class worden overgenomen door middel van inheritance. Gebruik hiervoor de onderstaande W3schools-pagina, waarop staat beschreven hoe inheritance in Python werkt. Voel je vrij om gebruik te maken van andere externe bronnen. Een goede programmeur is immers een goede onderzoeker: https://www.w3schools.com/python/python_inheritance.asp
- Roep de Info-functie aan voor de Student- en Professor-class, zonder deze opnieuw aan te maken in deze classes. Als je correct gebruik maakt van inheritance, zou dit goed moeten werken. Geef als parameters waarden naar keuze mee.
![](https://www.jorcademy.nl/wp-content/uploads/2021/02/uml-inheritance-2-1.png)
Oplossing huiswerkopdracht
Voorbeeld output
![](https://www.jorcademy.nl/wp-content/uploads/2021/02/246FA8B6-FA17-4B65-9BBE-AA9577D81BCE_4_5005_c.jpeg)
Voorbeeld code
# Base Class - Persoon class Persoon: def __init__(self, naam, leeftijd, geslacht): self.naam = naam self.leeftijd = leeftijd self.geslacht = geslacht def Info(self): print("Naam:", self.naam) print("Leeftijd:", self.leeftijd) print("Geslacht:", self.geslacht, "\n") # Derived Class - Student class Student(Persoon): def __init__(self, naam, leeftijd, geslacht, startJaar): super().__init__(naam, leeftijd, geslacht) self.startJaar = startJaar def PrintStartJaar(self): print(self.naam, "is begonnen met zijn studie in", str(self.startJaar) + ".\n") # Derived Class - Professor class Professor(Persoon): def __init__(self, naam, leeftijd, geslacht, studieRichting): super().__init__(naam, leeftijd, geslacht) self.studieRichting = studieRichting def PrintRichting(self): print("Prof.", self.naam, "geeft les in", self.studieRichting + ".\n") student = Student("Nick", 19, "Man", 2021) student.Info(); professor = Professor("Van Beek", 55, "Vrouw", "Computer Science") professor.Info()