Kế thừa là một quan hệ giữa hai lớp. Kế thừa tạo ra một mối quan hệ cha mẹ giữa các lớp. Nó là một cơ chế để sử dụng lại mã và cho phép các phần mở rộng độc lập của phần mềm gốc thông qua các lớp và giao diện công khai. .
Trong Ruby, một lớp chỉ có thể kế thừa từ một lớp khác. (nghĩa là một lớp có thể kế thừa từ một lớp kế thừa từ một lớp khác kế thừa từ một lớp khác, nhưng một lớp không thể kế thừa từ nhiều lớp cùng một lúc). Lớp BasicObject là lớp cha của tất cả các lớp trong Ruby. Do đó, các phương thức của nó có sẵn cho tất cả các đối tượng trừ khi bị ghi đè rõ ràng.
Ruby vượt qua sự kế thừa một lớp cùng một lúc bằng cách sử dụng mixin.
Tôi sẽ cố gắng giải thích bằng một ví dụ.
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
Bạn có thể theo dõi bằng cách sử dụng class_name.superclass.name và thực hiện quá trình này trừ khi bạn tìm thấy BasicOject trong hệ thống phân cấp này. BasicObject là siêu lớp o mọi lớp. hãy xem giả sử chúng ta muốn xem cây phân cấp lớp C.
C.superclass
=> B
B.superclass
=> A
A.superclass
=> Object
Object.superclass
=> BasicObject
Bạn có thể thấy toàn bộ hệ thống phân cấp của lớp C. Điểm cần lưu ý khi sử dụng cách tiếp cận này, bạn sẽ không tìm thấy các mô-đun được bao gồm hoặc thêm vào trước trong các lớp cha.
Có một cách tiếp cận khác để tìm hệ thống phân cấp hoàn chỉnh bao gồm các mô-đun. Theo tổ tiên của Ruby doc . Trả về danh sách các mô-đun được bao gồm / thêm vào trước trong bản mod (bao gồm cả bản thân mod).
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
Ở đây, Mux và Kernel là Mô-đun.
http://rubylearning.com/satishtalim/ruby_inheritance.html
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
B.methods.sort
trong irb. Có thể điều gì đó sẽ cung cấp cho bạn manh mối về tên phương thức mà bạn tìm kiếm.