Tôi đang cố gắng hiểu Mixins trong bối cảnh scala. Đặc biệt, tôi muốn biết sự khác biệt giữa các khái niệm về thừa kế và Mixins. Wiki nói rằng có sự khác biệt quan trọng giữa các khái niệm về mixin và thừa kế và do đó tôi muốn hiểu nó.Sự khác biệt giữa mixin và thừa kế là gì?
Định nghĩa của Mixin trong wiki nói:
Một lớp mixin hoạt động như lớp cha mẹ, có chứa các chức năng mong muốn. Sau đó, một lớp con có thể kế thừa hoặc đơn giản sử dụng lại chức năng này, nhưng không phải là phương tiện chuyên môn. Thông thường, mixin sẽ xuất các chức năng mong muốn vào một lớp con, mà không tạo ra một mối quan hệ cứng nhắc, duy nhất "là một". Đây là sự khác biệt quan trọng giữa các khái niệm về mixin và thừa kế, trong đó lớp con vẫn có thể kế thừa tất cả các đặc tính của lớp cha, nhưng, ngữ nghĩa về đứa trẻ "là một loại" cha mẹ không nhất thiết phải áp dụng.
Trong định nghĩa trên, tôi không thể hiểu các câu được đánh dấu bằng chữ in đậm. điều đó có nghĩa là
- Một lớp có thể kế thừa chức năng trong mixin nhưng không phải là một phương tiện để chuyên môn hóa
- Trong mixins, đứa trẻ được thừa hưởng tất cả các tính năng của lớp cha nhưng ngữ nghĩa về trẻ em "là một loại" các cha mẹ không cần thiết phải được áp dụng. - Làm thế nào một đứa trẻ có thể mở rộng một phụ huynh và không nhất thiết phải là một loại Phụ Huynh? Có một ví dụ như thế.
Cảm ơn trước vì đã giải thích rõ về điều này.
Trong Scala, hãy nghĩ về Mixins như một phép biến đổi biên dịch thời gian gọn gàng, nó sẽ trang trí một số loại nhất định với các phương thức bổ sung. Trong trường hợp này, trong khi Scala theo dõi "hỗn hợp trong các loại" cho trình kiểm tra kiểu, các định nghĩa phương thức tự được * làm phẳng * thành các kiểu thực tế để không có cha-con được thiết lập trong các lớp JVM. Thừa kế thường được kết hợp với độ phân giải phương pháp đa hình thời gian chạy - nhưng mixin là (chủ yếu) khái niệm trực giao. Giao diện Java 8 Các phương thức mặc định là các mixin. – user2864740
Câu hỏi này dường như đã được [hỏi trước trong một bối cảnh rộng hơn] (http://stackoverflow.com/questions/860245/mixin-vs-inheritance) (mặc dù tôi không cảm thấy hoàn toàn hài lòng bởi các câu trả lời ở đó). – badcook