E048: Super Qualifier Must Be Parent
This error is emitted when a qualifier used in a super prefix does not name a parent type of the class.
When a qualifier T is used in a super prefix of the form C.super[T], T must be a direct parent type of C. This syntax is used to disambiguate which parent's implementation to call when a class has multiple parents with the same method.
Example
trait A:
def greet: String = "A"
trait B:
def greet: String = "B"
class C extends A, B:
override def greet: String = super[String].greet
Error
-- [E048] Reference Error: example.scala:8:31 ----------------------------------
8 | override def greet: String = super[String].greet
| ^^^^^^^^^^^^^
| String does not name a parent of class C
|-----------------------------------------------------------------------------
| Explanation (enabled by `-explain`)
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| When a qualifier T is used in a super prefix of the form C.super[T],
| T must be a parent type of C.
|
| In this case, the parents of class C are:
| - A
| - B
| - Object
-----------------------------------------------------------------------------
Solution
// Use an actual parent type in the super qualifier
trait A:
def greet: String = "A"
trait B:
def greet: String = "B"
class C extends A, B:
override def greet: String = super[A].greet
// Or call a specific parent's method
trait A:
def greet: String = "A"
trait B:
def greet: String = "B"
class C extends A, B:
override def greet: String = super[B].greet
In this article