Kalıtım, iki sınıf arasındaki bir ilişkidir. Kalıtım, sınıflar arasında bir ebeveyn çocuk ilişkisi yaratır. Bu, kodun yeniden kullanımı için bir mekanizmadır ve orijinal yazılımın genel sınıflar ve arayüzler aracılığıyla bağımsız uzantılarına izin verir. Kalıtımın yararı, hiyerarşinin altındaki sınıfların daha yüksek olanların özelliklerini alması, ancak aynı zamanda kendilerine ait belirli özellikleri de ekleyebilmeleridir. .
Ruby'de, bir sınıf yalnızca tek bir diğer sınıftan miras alabilir. (yani bir sınıf, başka bir sınıftan miras alan başka bir sınıftan miras alabilir, ancak tek bir sınıf aynı anda birçok sınıftan miras alamaz). BasicObject sınıfı, Ruby'deki tüm sınıfların ana sınıfıdır. Bu nedenle yöntemleri, açıkça geçersiz kılınmadıkça tüm nesneler tarafından kullanılabilir.
Ruby, mixin'i kullanarak tek seferde sınıf kalıtımının üstesinden gelir.
Bir örnekle açıklamaya çalışacağım.
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
Class_name.superclass.name kullanarak izleyebilir ve bu hiyerarşide BasicOject'i bulmadıysanız bu işlemi yapabilirsiniz. BasicObject, her sınıf için süper sınıftır. C sınıfı hiyerarşi ağacını görmek istediğimizi varsayalım.
C.superclass
=> B
B.superclass
=> A
A.superclass
=> Object
Object.superclass
=> BasicObject
C sınıfının tüm hiyerarşisini görebilirsiniz. Bu yaklaşımı kullanarak, üst sınıflara dahil edilmiş veya başlarına eklenen modülleri bulamayacağınızı unutmayın.
Modüller dahil olmak üzere tam bir hiyerarşi bulmak için başka bir yaklaşım vardır. Ruby doktor atalarına göre . Modda bulunan / başına eklenen modüllerin bir listesini döndürür (modun kendisi dahil).
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
Burada Mux ve Kernel Modüllerdir.
http://rubylearning.com/satishtalim/ruby_inheritance.html
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
B.methods.sortirb'yi deneyin . Belki bir şey aradığınız yöntemin adı hakkında size bir ipucu verecektir.