Next Previous Contents

32. <4.2.2.1>: Multippel arv

Beklager. Det er ikke lov å la en klasse arve fra mer enn en superklasse i Ruby.

Derimot har Ruby mixin, som kan legge til funksjonalitet fra flere moduler inn i en klasse. Dvs, du kan bare arve fra en klasse, men kan blande inn funksjonalitet i fra flere moduler.

  1| class Familie
  2|   # Vi inkluderer funksjonalitet fra modulen kalt Enumerable.
  3|   include Enumerable
  4| 
  5|   # Enumerable forventer at each-metoden 
  6|   # itereres over innholdet.
  7|   def each
  8|     yield "Far"
  9|     yield "Mor"
 10|     yield "Sønn"
 11|     yield "Datter"
 12|   end
 13| end
 14| 
 15| f = Familie.new
 16| 
 17| # include? og sort metodene er mikset inn fra Enumerable.
 18| puts f.include?("Sønn") #=> true
 19| puts f.sort.join(", ")  #=> "Datter, Far, Mor, Sønn"

I kontrast til Java tilbyr dette multippel arv av funksjonalitet. Java bruker interface til å "etterligne" multippel arv, men tilbyr ikke arv av implementasjon og løser noe som er et ikke-problem når man har dynamisk typing.


Next Previous Contents