Programmation Ruby/Héritage
L'héritage permet de créer une classe à partir d'une autre pour l'enrichir, ou la spécialiser. Une classe (classe dérivée, ou classe fille) hérite d'une autre classe (classe de base, ou classe mère).
On peut toujours utiliser les méthodes de la (des) classe(s) mère(s) dans une classe dérivée.
L'opérateur <
précède le nom de la classe de base.
Exemple
modifierLa classe Point
vue précédemment :
class Point
def initialize( x, y )
@x = x
@y = y
end
def coords
puts "x : #{@x}"
puts "y : #{@y}"
end
end
peut être dérivée en une classe PointCouleur
représentant un point coloré.
Cette classe possède donc un attribut supplémentaire pour la couleur :
class PointCouleur < Point
def initialize( x, y, couleur )
super(x,y) # appel au constructeur de la classe Point
@couleur = couleur
end
def couleur
puts "couleur : #{@couleur}"
end
end
Lorsqu'on crée une instance de la classe dérivée, on bénéficie immédiatement des méthodes de celle-ci :
pc = PointCouleur.new(1,2,"rouge")
pc.couleur
# => couleur : rouge
Et les méthodes de la classe de base étant héritées, on pourra la réutiliser dans la classe dérivée :
pc.coords
# => x : 1
# y : 2
Par contre, la classe de base ne possède pas les méthodes définies dans les classes dérivées.
p1 = Point.new
p1.couleur
=> NoMethodError: undefined method `couleur' for #<Point:0xb7c059b0 @x=0, @y=0>