Syntax:
class ErbendeKlasse < GebendeKlasse end
Über die Vererbung können wir Attribute und Methoden an eine weitere Klasse vererben. < liest man hier als “erbt von”. Die beiden Klassen müssen in einer “is a” Beziehung zueinander stehen. Die Vererbende Klasse wird häufig auch als parent oder superclass bezeichnet, die Erben als child oder subclass.
Beispiel:
class Bier def brauen puts "Dieses Bier wurde von Hand gebraut" end end class PilsAusPilsen < Bier end pil = PilsAusPilsen.new pil.brauen #Ausgabe: Dieses Bier wurde von Hand gebraut
Wenn eine Klasse nun vererbt wurde, können eine oder mehrere Methdode und Attribute auch überschrieben werden, man spricht von einem Override.
Beispiel:
class Bier def brauen puts "Dieses Bier wurde von Hand gebraut" end end class PilsAusPilsen < Bier end pil = PilsAusPilsen.new def brauen puts "Dieses Bier kommt aus Pilsen." end pil.brauen #Ausgabe: Dieses Bier wurde von Hand gebraut. Die Methoden "brauen" aus der vereerbenden Klassen "Bier" wurde mit einem neuen Puts Befehl überschrieben.
Aber auch wenn wir Methoden und/oder Attribute überschrieben haben, können wir auf diese mit dem Befehl super wieder zugreifen:
class Bier def initialize(name) @name = name end def brauen puts "Das Bier wurde von Hand gebraut." end end class PilsAusPilsen < Bier def brauen puts "Dieses Pils stammt aus Pilsen" super end end bierinfo = PilsAusPilsen.new("myname") bierinfo.brauen #Erzeugt die folgende Ausgabe: Dieses Pils stammt aus Pilsen Das Bier wurde von Hand gebraut.
Es wird deutlich wie super funktioniert: Wenn Ruby den Befehl super innerhalb einer Methode findet, so schaut Ruby in der superclass der gegenwärtigen Klasse nach ob es dort eine Methode findet, die den gleichen Namen trägt, wie die Methode in der es ausgeführt wird. Ruby benutzt dann die superclass Methode.
Mehrfache Vererbungen nicht möglich
Beispiel:
class PilsAusPilsen < Bier; end class PilsAusPilsen < Export; end #Ausgabe: superclass mismatch for class PilsAusPilsen
Wir bedienen uns hier einer kleinen Abkürzung mit ; end, sodass wir alles in einer Zeile verfassen können. Wir sehen an der Ausgabe, das Ruby es nicht zulässt, dass eine Klasse zweimal erbt. Dies wird erst mit mixins möglich.