Khi anh ta nói rằng Scala không hỗ trợ nhiều kế thừa, thì anh ta đề cập đến việc kế thừa một phương thức thực hiện nhiều lần. Tất nhiên, bạn có thể triển khai nhiều giao diện / đặc điểm trong một lớp và chúng thậm chí có thể định nghĩa cùng một phương thức, nhưng bạn không bị xung đột giữa các triển khai khác nhau do tuyến tính hóa.
Nói chung, nếu bạn có một lớp C1
với một phương thức f()
và một lớp C2
cũng với một phương thức f()
, thì nhiều kế thừa có nghĩa là bạn có thể bằng cách nào đó kế thừa cả hai triển khai f()
. Điều này có thể dẫn đến nhiều vấn đề khác nhau, mà Scala giải quyết bằng cách chỉ cho phép bạn thừa hưởng từ một lớp duy nhất và trong trường hợp có nhiều đặc điểm bằng cách chọn một triển khai dựa trên thứ tự các đặc điểm.
Đối với Nothing
mọi thứ thực sự đơn giản, bởi vì không có gì không có thuộc tính hoặc phương thức được xác định. Vì vậy, bạn không thể có bất kỳ xung đột thừa kế. Nhưng tôi cho rằng hầu hết sự ngạc nhiên của bạn đến từ một sự hiểu biết khác nhau về đa thừa kế.
Một khi bạn hiểu rằng tuyến tính hóa đặc điểm loại bỏ một cách hiệu quả bất kỳ sự mơ hồ nào của thừa kế và chúng tôi không đề cập đến việc thừa kế từ nhiều tính trạng như nhiều di truyền do đó, thì bạn sẽ ổn thôi.
Về việc này được nhận ra như thế nào: trình biên dịch cuối cùng chịu trách nhiệm cho việc này. Xem phần tuân thủ phần đặc tả ngôn ngữ Scala 3.5.2, trong số các thuộc tính khác bao gồm:
For every type constructor T (with any number of type parameters), scala.Nothing <: T <: scala.Any.
Hay nói cách khác, nếu bạn muốn triển khai một trình biên dịch chính xác, nó phải xử lý Nothing
như một kiểu con của mọi thứ theo đặc tả. Vì các lý do rõ ràng, Nothing
không được xác định để mở rộng từ tất cả các lớp được tải vào hệ thống, nhưng mức độ liên quan của việc xác định Nothing
là kiểu con được giới hạn ở tất cả các nơi, trong đó phân nhóm có liên quan.
Một điểm quan trọng ở đây là không tồn tại trường hợp loại Nothing
, do đó, việc xử lý của nó bị giới hạn nghiêm ngặt đối với việc kiểm tra kiểu, tất cả nằm trong địa hạt của trình biên dịch.