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.fetchAusgabe:
Rex is eating
Rex fetches the ballDie 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
endAusgabe:
breathing
undefined method `fetch' for an instance of Catsuperclass 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.superclassAusgabe:
Animal
Object
BasicObjectVererbung 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 < Animal benötigt Animal
require_relative 'cat'Aufgabe
EinfachVervollstä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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-Ruby-Compiler