E048: Super Qualifier Must Be Parent — super 한정자는 부모 타입이어야 해요
E048: Super Qualifier Must Be Parent — super 한정자는 부모 타입이어야 해요
super 접두사에 사용된 한정자(qualifier) 가 클래스의 부모 타입을 가리키지 않을 때 이 에러가 나와요.
본문
C.super[T] 형태의 super 접두사에서 한정자 T를 쓸 때, T는 반드시 C의 직접 부모 타입이어야 해요. 이 문법은 클래스가 같은 메서드를 가진 여러 부모를 가질 때, 어느 부모의 구현을 호출할지 명확히 하기 위해 사용돼요.
예제 (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
String은 C의 부모가 아니에요. 그래서 super[String]은 올바르지 않죠.
오류 메시지 (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)
super 한정자에 실제 부모 타입을 사용하거나, 특정 부모의 메서드를 호출하면 돼요.
// 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