abstract override는 트레이트에서만 가능
abstract override는 트레이트에서만 가능 (Abstract Override Only In Traits)
트레이트 밖의 멤버에 abstract override를 사용했을 때 나오는 에러예요.
본문
트레이트 밖에 있는 멤버에 abstract override를 사용하면 이 에러가 발생해요.
abstract override 수식어는 트레이트의 멤버에만 허용돼요. 이는 그 멤버가 수퍼클래스의 구체 멤버를 오버라이드하되, 트레이트가 클래스에 섞일 때 추가 구현이 필요하다는 뜻이에요.
예시
class Base:
def greet: String = "Hello"
class Child extends Base:
abstract override def greet: String = super.greet + "!"
에러 메시지
-- [E064] Syntax Error: example.scala:5:24 -------------------------------------
5 | abstract override def greet: String = super.greet + "!"
| ^
| abstract override modifier only allowed for members of traits
해결 방법
// Use abstract override in a trait
class Base:
def greet: String = "Hello"
trait Greeter extends Base:
abstract override def greet: String = super.greet + "!"
class Child extends Base with Greeter
// Or use a regular override in a class
class Base:
def greet: String = "Hello"
class Child extends Base:
override def greet: String = super.greet + "!"
더 알아보기
abstract override는 트레이트 안에서 쓰고, 클래스에서는 일반override를 쓰면 돼요.