Thừa kế là mối quan hệ giữa hai lớp. Thừa kế tạo ra một mối quan hệ con cái giữa các lớp học cha mẹ. Nó là một cơ chế cho mã tái sử dụng 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. Lợi ích của việc thừa kế là các lớp có mức độ thấp hơn, nhưng có thể thêm cụ thể tính năng của riêng mình.
Trong Ruby, một lớp chỉ có thể kế thừa từ một lớp khác. (ví dụ: một lớp có thể kế thừa từ một lớp thừa kế từ một lớp khác kế thừa từ một lớp khác, nhưng một lớp duy nhất 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 được ghi đè rõ ràng.
Ruby vượt qua kế thừa lớp đơn 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 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 quy trình này trừ khi bạn tìm thấy BasicOject trong cấu trúc phân cấp này. BasicObject là siêu lớp o mỗi lớp. cho phép 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. Chỉ vào lưu ý bằ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 được thêm vào trong lớp cha.
Có một cách tiếp cận khác để tìm phân cấp hoàn chỉnh bao gồm các mô-đun. Theo tài liệu của Ruby ancestors. Trả về một danh sách các mô-đun bao gồm/được thêm vào trong mod (bao gồm cả bản thân mod).
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
Ở đây, Mux và hạt nhân là mô-đun.
http://rubylearning.com/satishtalim/ruby_inheritance.html https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
khi bị mắc kẹt như thế này luôn cố gắng 'B.methods.sort' trong IRB. Có lẽ một cái gì đó sẽ cung cấp cho bạn một đầu mối về tên phương pháp bạn tìm kiếm. –
@IvayloStrandjev Điều đó sẽ không giúp ích gì. Có quá nhiều phương pháp để xem xét. Đó là sự lãng phí thời gian. – sawa
@sawa không đúng. Mất 30 giây. Đủ cho những người dùng khác nhanh hơn tôi, nhưng khá nhanh. –