Menu
Coddy logo textTech

Unterklassen

Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 22 von 57.

Vererbung erstellt eine neue Klasse auf Grundlage einer bestehenden. class Dog < Animal macht Dog zu einer Unterklasse von Animal, ihrer Oberklasse. Ein Hund verfügt über jede Methode eines Tiers, einschließlich initialize, sowie über die Methoden, die Dog hinzufügt:

class Animal
  attr_reader :name

  def initialize(name)
    @name = name
  end

  def eat
    "#{name} is eating"
  end
end

class Dog < Animal
  def fetch
    "#{name} fetches the ball"
  end
end

rex = Dog.new("Rex")
puts rex.eat
puts rex.fetch

Ausgabe:

Rex is eating
Rex fetches the ball

Die hinzugefügten Methoden gehören nur zur Unterklasse. Ein einfaches Animal verfügt nicht über sie, und eine Geschwisterklasse wie Cat sieht die Methoden von Dog nicht:

class Animal
  def breathe
    "breathing"
  end
end

class Dog < Animal
  def fetch
    "fetching"
  end
end

class Cat < Animal
end

puts Cat.new.breathe
begin
  Cat.new.fetch
rescue NoMethodError => e
  puts e.message
end

Ausgabe:

breathing
undefined method `fetch' for an instance of Cat

superclass bezeichnet die übergeordnete Klasse einer Klasse. Eine Ruby-Klasse hat genau eine Oberklasse, und eine Klasse, die ohne < deklariert wird, erbt von Object. Dadurch erhält jedes Objekt Methoden wie to_s und inspect:

class Animal
end

class Dog < Animal
end

puts Dog.superclass
puts Animal.superclass
puts Object.superclass

Ausgabe:

Animal
Object
BasicObject

Vererbung entspricht einer is-a-Beziehung: Ein Hund ist ein Tier, ein Sparkonto ist ein Konto. Gemeinsames Verhalten wird einmal in der Oberklasse definiert, und jede Unterklasse fügt hinzu, was sie von den anderen unterscheidet. In diesem Abschnitt befindet sich jede Klasse in ihrer eigenen Datei, und die Datei der Oberklasse wird zuerst geladen:

# main.rb
require_relative 'animal'   # zuerst die Superklasse
require_relative 'dog'      # class Dog &lt; Animal benötigt Animal
require_relative 'cat'
challenge icon

Aufgabe

Einfach

Vervollständige die Klassen. Vehicle speichert einen name und eine Anzahl von wheels und verfügt über describe, das Mini has 4 wheels zurückgibt. Car und Bike sind Unterklassen von Vehicle, die initialize nicht definieren. Car fügt honk hinzu, das Mini says beep zurückgibt, und Bike fügt ring hinzu, das BMX rings zurückgibt.

Der bereitgestellte Code liest Zeilen car Mini oder bike BMX, erstellt ein Car mit 4 Rädern oder ein Bike mit 2 Rädern und gibt describe, das Geräusch (honk oder ring) sowie die Oberklasse der Klasse des Objekts aus.

Dein Code gehört in vehicle.rb, car.rb und bike.rb. main.rb enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

require_relative 'vehicle'
require_relative 'car'
require_relative 'bike'

# Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
input = []
while (line = gets)
  input << line.chomp
end
input.each do |line|
  kind, name = line.split(" ", 2)
  if kind == "car"
    v = Car.new(name, 4)
    sound = v.honk
  else
    v = Bike.new(name, 2)
    sound = v.ring
  end
  puts v.describe
  puts sound
  puts v.class.superclass
end
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Ruby-Compiler