Wenn er sagt, dass Scala die Mehrfachvererbung nicht unterstützt, bezieht er sich darauf, eine Methodenimplementierung mehrmals zu erben. Natürlich können Sie mehrere Interfaces / Merkmale in einer Klasse implementieren, und sie können sogar dieselbe Methode definieren, aber Sie erhalten keinen Konflikt zwischen den verschiedenen Implementierungen aufgrund der Merkmallinearisierung.
Wenn Sie eine Klasse C1mit einer Methode f()und eine Klasse C2auch mit einer Methode haben f(), bedeutet Mehrfachvererbung im Allgemeinen, dass Sie beide Implementierungen von irgendwie erben können f(). Dies kann zu verschiedenen Problemen führen, die Scala dadurch löst, dass Sie nur von einer einzelnen Klasse erben lassen und bei mehreren Merkmalen eine Implementierung anhand der Reihenfolge der Merkmale auswählen.
Was Nothingsind die Dinge wirklich einfach, weil nichts definiert keine Attribute oder Methoden hat. Sie können also keine Vererbungskonflikte haben. Aber ich gehe davon aus, dass der größte Teil Ihrer Überraschung auf einem anderen Verständnis der Mehrfachvererbung beruht.
Wenn Sie verstanden haben, dass die Linearisierung von Merkmalen die Mehrdeutigkeit der Vererbung effektiv beseitigt und wir das Erben von mehreren Merkmalen aus diesem Grund nicht als Mehrfachvererbung bezeichnen , sollten Sie in Ordnung sein.
Wie dies realisiert wird: Der Compiler ist letztendlich dafür verantwortlich. Weitere Informationen finden Sie in der Scala-Sprachspezifikation in Abschnitt 3.5.2, der unter anderem Folgendes enthält:
For every type constructor T (with any number of type parameters), scala.Nothing <: T <: scala.Any.
Mit anderen Worten, wenn Sie einen Compiler korrekt implementieren möchten, muss er nach NothingSpezifikation als Subtyp von allem behandelt werden. Aus offensichtlichen Gründen Nothinggilt die Definition nicht für alle in das System geladenen Klassen. Die Relevanz der Definition Nothingals Untertyp ist jedoch auf alle Stellen beschränkt, an denen die Untertypisierung relevant ist.
Ein wichtiger Punkt hierbei ist, dass es keine Instanz eines Typs Nothinggibt. Daher ist seine Behandlung streng auf die Typprüfung beschränkt, die sich ausschließlich im Bereich des Compilers befindet.