Chapter 11. The Scala Object System, Part II
We finish our discussion of Scala’s object system by examining the rules for overriding members of classes and traits, including a discussion of the details of the linearization algorithm Scala uses for resolving member definitions and overrides in types that mix in traits and extend other types.
Overriding Members of Classes and Traits
Classes and traits can declare abstract members: fields, methods, and types. These members must be defined by a derived class or trait before an instance can be created. Most object-oriented languages support abstract methods, and some also support abstract fields and types.
Note
When overriding a concrete member, Scala requires the override
keyword. It is optional when a subtype defines (“overrides”) an abstract member. Conversely, it is an error to use override
when you aren’t actually overriding a member.
Requiring the override
keyword has several benefits:
-
It catches misspelled members that were intended to be overrides. The compiler will throw an error that the member doesn’t override anything.
-
It catches a subtle bug that can occur if a new member is added to a base class where the member’s name collides with a preexisting member in a derived class, one which is unknown to the base class developer. That is, the derived-class member was never intended to override a base-class member. Because the derived-class member won’t have the
override
keyword, the compiler will throw an error when the ...
Get Programming Scala, 2nd Edition 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.