Ketika dia mengatakan bahwa Scala tidak mendukung multiple inheritance, maka dia merujuk pada pewarisan implementasi metode beberapa kali. Tentu saja, Anda dapat mengimplementasikan beberapa antarmuka / sifat dalam sebuah kelas, dan mereka bahkan dapat mendefinisikan metode yang sama, tetapi Anda tidak mendapatkan konflik antara implementasi yang berbeda karena linierisasi sifat.
Secara umum, jika Anda memiliki kelas C1
dengan metode f()
dan kelas C2
juga dengan metode f()
, maka multiple inheritance berarti Anda dapat mewarisi kedua implementasi dari f()
. Ini dapat menyebabkan berbagai masalah, yang diselesaikan Scala dengan hanya membiarkan Anda mewarisi dari satu kelas dan dalam kasus beberapa sifat dengan memilih satu implementasi berdasarkan urutan sifat tersebut.
Adapun Nothing
hal-hal yang sangat sederhana, karena tidak ada yang tidak memiliki atribut atau metode yang ditentukan. Jadi, Anda tidak dapat memiliki konflik warisan. Tetapi saya berasumsi bahwa sebagian besar kejutan Anda berasal dari pemahaman yang berbeda tentang pewarisan berganda.
Setelah Anda memahami bahwa linierisasi sifat secara efektif menghilangkan segala ambiguitas warisan, dan bahwa kami tidak menyebut mewarisi dari banyak sifat sebagai warisan ganda karena itu, maka Anda harus baik-baik saja.
Mengenai bagaimana ini direalisasikan: kompiler pada akhirnya bertanggung jawab untuk ini. Lihat bagian spesifikasi bahasa Scala 3.5.2 kesesuaian, yang antara properti lainnya termasuk:
For every type constructor T (with any number of type parameters), scala.Nothing <: T <: scala.Any.
Atau dengan kata lain, jika Anda ingin mengimplementasikan kompiler dengan benar, ia harus menangani Nothing
sebagai subtipe dari segalanya berdasarkan spesifikasi. Untuk alasan yang jelas, Nothing
tidak didefinisikan untuk memperluas dari semua kelas yang dimuat ke dalam sistem, tetapi relevansi mendefinisikan Nothing
sebagai subtipe terbatas pada semua tempat, di mana subtyping relevan.
Poin penting di sini adalah bahwa tidak ada contoh tipe Nothing
, oleh karena itu, perawatannya terbatas hanya untuk pemeriksaan tipe, yang semuanya ada di ranah kompiler.