Podklasy
Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 22 z 57.
Dziedziczenie tworzy nową klasę na podstawie istniejącej. class Dog < Animal sprawia, że Dog jest podklasą Animal, swojej nadklasy. Pies ma wszystkie metody zwierzęcia, w tym initialize, a także metody dodane przez Dog:
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.fetchWynik:
Rex is eating
Rex fetches the ballDodane metody należą tylko do podklasy. Zwykły Animal ich nie ma, a klasa siostrzana, taka jak Cat, nie widzi metod klasy Dog:
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
endWynik:
breathing
undefined method `fetch' for an instance of Catsuperclass wskazuje klasę nadrzędną danej klasy. Klasa w Ruby ma dokładnie jedną klasę nadrzędną, a klasa zadeklarowana bez < dziedziczy po Object, co zapewnia każdemu obiektowi metody takie jak to_s i inspect:
class Animal
end
class Dog < Animal
end
puts Dog.superclass
puts Animal.superclass
puts Object.superclassWynik:
Animal
Object
BasicObjectDziedziczenie pasuje do relacji jest: pies jest zwierzęciem, konto oszczędnościowe jest kontem. Wspólne zachowanie umieszcza się raz w nadklasie, a każda podklasa dodaje to, co ją wyróżnia. W tej sekcji każda klasa znajduje się we własnym pliku, a plik nadklasy jest wczytywany jako pierwszy:
# main.rb
require_relative 'animal' # najpierw klasa nadrzędna
require_relative 'dog' # class Dog < Animal wymaga Animal
require_relative 'cat'Wyzwanie
ŁatwyUzupełnij klasy. Vehicle przechowuje name i liczbę wheels oraz ma metodę describe, która zwraca Mini has 4 wheels. Car i Bike są podklasami Vehicle, które nie definiują initialize. Car dodaje honk, która zwraca Mini says beep, a Bike dodaje ring, która zwraca BMX rings.
Dostarczony kod odczytuje wiersze car Mini lub bike BMX, tworzy obiekt Car z 4 kołami albo Bike z 2 kołami, a następnie wypisuje wynik describe, dźwięk (honk lub ring) oraz nadklasę klasy obiektu.
Umieść swój kod w plikach vehicle.rb, car.rb i bike.rb. main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
require_relative 'vehicle'
require_relative 'car'
require_relative 'bike'
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasZmienne instancjiMetody i selfto_s i inspectPowtórzenie – karta biblioteczna4Hermetyzacja
Metody prywatneMetody chronionePrywatne setteryOchrona stanuPowtórzenie – automat vendingowy7Polimorfizm i typowanie kacze
PolimorfizmTypowanie kaczeMetody abstrakcyjnecase i klasyPowtórzenie – metody płatności10Wzorce projektowe, część 2
Delegowanie z ForwardableWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Metody dostępowe i self
Gettery i setteryWłasne setteryself w metodachTożsamość i równośćPowtórzenie – lista kontaktów5Dziedziczenie
PodklasyNadpisywanie metodWywoływanie superis_a? i przodkowiePowtórka – lista płac pracowników8Metody specjalne
Równość i hashMetody operatorówIndeksowanie i dodawanieWłasne kolekcjePowtórka – ułamki11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Kompilator Ruby online