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.
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.
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
overridekeyword, the compiler will throw an error when the ...