Quantcast
Channel: Erste Schritte mit Ruby » Klassen
Viewing all articles
Browse latest Browse all 3

Vererbung

$
0
0

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.


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles