Dziedziczenie to relacja między dwiema klasami. Dziedziczenie tworzy relację rodzic-dziecko między klasami. Jest to mechanizm umożliwiający ponowne wykorzystanie kodu i umożliwiający niezależne rozszerzenia oryginalnego oprogramowania za pośrednictwem publicznych klas i interfejsów. Zaletą dziedziczenia jest to, że klasy niższe w hierarchii uzyskują funkcje tych wyższych, ale mogą również dodawać własne specyficzne funkcje .
W Rubim klasa może dziedziczyć tylko z jednej innej klasy. (tj. klasa może dziedziczyć po klasie, która dziedziczy po innej klasie, która dziedziczy po innej klasie, ale jedna klasa nie może dziedziczyć z wielu klas jednocześnie). Klasa BasicObject jest klasą nadrzędną wszystkich klas w Rubim. Dlatego jego metody są dostępne dla wszystkich obiektów, chyba że zostaną jawnie zastąpione.
Ruby od razu pokonuje dziedziczenie pojedynczej klasy, używając funkcji mixin.
Spróbuję wyjaśnić na przykładzie.
module Mux
def sam
p "I am an module"
end
end
class A
include Mux
end
class B < A
end
class C < B
end
class D < A
end
Możesz śledzić, używając nazwa_klasy.superclass.name i wykonywać ten proces, chyba że znalazłeś BasicOject w tej hierarchii. BasicObject to super klasa dla wszystkich klas. zobaczmy, że chcemy zobaczyć drzewo hierarchii klasy C.
C.superclass
=> B
B.superclass
=> A
A.superclass
=> Object
Object.superclass
=> BasicObject
Możesz zobaczyć całą hierarchię klasy C. Zwróć uwagę, że używając tego podejścia nie znajdziesz modułów, które są dołączone lub dołączone do klas nadrzędnych.
Istnieje inne podejście do znalezienia pełnej hierarchii, w tym modułów. Według przodków Ruby doc . Zwraca listę modułów dołączonych / dołączonych do moda (w tym sam mod).
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
Tutaj Mux i Kernel to moduły.
http://rubylearning.com/satishtalim/ruby_inheritance.html
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
B.methods.sortw irb. Może coś wskaże Ci nazwę metody, której szukasz.