C'est la même chose que les concepts d'héritage et de polymorphisme dans les autres langages.
Le concept d'héritage, c'est qu'une classe peut hériter d'une classe (qu'on appelle la classe de base).
Ici, on a les classes Chat et Chien.
La classe de base, c'est Animale.
Ce que Chat et Chien ont en commun, c'est qu'il sont tout les deux des animaux alors ils héritent de la classe Animale. Lorsqu'une classe hérite d'une autre, elle adopte tout les caractéristiques de la classe de base.
La deuxième partie, le polymorphisme, c'est le concept de modifier les caractéristiques adoptées de la classe de base pour les adapter à notre classe.
Ici, la fonction get_espece est écrite dans la classe Chien pour retourner la chaine "Chien" et elle est écrite pour retourner "Chat" pour la classe chat.
En appelant la fonction get_espece d'un objet qui hérite d'Animal, elle va avoir un comportement différent dépendamment de la classe qui la hérité. (polymorphe = peut prendre plusieurs formes)