Kapitel 12. Instanzinitialisierung und Methodenauflösung

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Ein Typ hat einen gerichteten azyklischen Graphen (DAG) von Abhängigkeiten mit seinen Supertypen. Wenn die Felder eines Typs über diesen DAG verteilt sind, kann die Reihenfolge der Initialisierung wichtig werden, um zu verhindern, dass auf ein Feld zugegriffen wird, bevor es initialisiert ist. Wenn ein oder mehrere Typen in der DAG dieselbe Methode definieren und überschreiben, müssen die Regeln zur Methodenauflösung verstanden werden. Dieses Kapitel befasst sich mit diesen Konzepten. Wie wir sehen werden, sind sie eng miteinander verbunden und werden durch ein Konzept namens Linearisierung bestimmt .

Linearisierung einer Typenhierarchie

Aufgrund der Einfachvererbung wäre die Vererbungshierarchie eine einfache lineare Beziehung, ein Vorfahre nach dem anderen, wenn wir die gemischten Eigenschaften ignorieren würden. Wenn Eigenschaften berücksichtigt werden, von denen jede ein Subtyp anderer Eigenschaften und Klassen sein kann, bildet die Vererbungshierarchie ein DAG.

Der Begriff Linearisierung bezieht sich auf den Algorithmus, mit dem dieser Graph abgeflacht wird, um die Reihenfolge der Konstruktion der Typen im Graphen sowie die Reihenfolge der Methodenaufrufe zu bestimmen, einschließlich der Bindung von super, um eine Supertyp-Methode aufzurufen. Stell dir den linearisierten Traversalpfad ...

Get Scala programmieren, 3. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.