การสืบทอดเป็นความสัมพันธ์ระหว่างสองคลาส การสืบทอดจะสร้างความสัมพันธ์ของผู้ปกครองเด็กระหว่างคลาส เป็นกลไกในการใช้โค้ดซ้ำและอนุญาตให้มีส่วนขยายอิสระของซอฟต์แวร์ดั้งเดิมผ่านคลาสและอินเทอร์เฟซสาธารณะประโยชน์ของการสืบทอดคือคลาสที่ลดลำดับชั้นลงจะได้รับคุณสมบัติของสิ่งเหล่านั้นที่สูงขึ้น แต่ยังสามารถเพิ่มคุณสมบัติเฉพาะของตนเองได้ .
ใน Ruby คลาสสามารถสืบทอดจากคลาสอื่น ๆ ได้เท่านั้น (กล่าวคือคลาสสามารถสืบทอดจากคลาสที่สืบทอดมาจากคลาสอื่นซึ่งสืบทอดมาจากคลาสอื่น แต่คลาสเดียวไม่สามารถสืบทอดจากคลาสหลายคลาสพร้อมกันได้) คลาส BasicObject คือคลาสพาเรนต์ของคลาสทั้งหมดใน Ruby ดังนั้นวิธีการของมันจึงใช้ได้กับอ็อบเจ็กต์ทั้งหมดเว้นแต่จะถูกลบล้างอย่างชัดเจน
Ruby เอาชนะการสืบทอดคลาสเดี่ยวได้ในคราวเดียวโดยใช้ mixin
ฉันจะพยายามอธิบายด้วยตัวอย่าง
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 และทำกระบวนการนี้เว้นแต่คุณจะพบ BasicOject ในลำดับชั้นนี้ BasicObject เป็น super class o ทุกคลาส ลองดูสมมติว่าเราต้องการดูแผนผังลำดับชั้นคลาส C
C.superclass
=> B
B.superclass
=> A
A.superclass
=> Object
Object.superclass
=> BasicObject
คุณสามารถดูลำดับชั้นทั้งหมดของคลาส C ชี้ไปที่หมายเหตุโดยใช้วิธีนี้คุณจะไม่พบโมดูลที่รวมหรือนำหน้าในคลาสพาเรนต์
มีอีกวิธีหนึ่งในการค้นหาลำดับชั้นที่สมบูรณ์รวมถึงโมดูล อ้างอิงจาก Ruby docบรรพบุรุษของ . ส่งคืนรายการโมดูลที่รวม / นำหน้าใน mod (รวมถึงตัว mod เอง)
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
ที่นี่ Mux และ Kernel เป็นโมดูล
http://rubylearning.com/satishtalim/ruby_inheritance.html
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
B.methods.sort
irb เสมอ บางทีบางอย่างอาจให้เบาะแสเกี่ยวกับชื่อวิธีการที่คุณมองหา