E064: Abstract Override Only In Traits

This error is emitted when abstract override is used on a member outside of a trait.

The abstract override modifier is only allowed for members of traits. It indicates that the member will override a concrete member from a superclass but requires further implementation when the trait is mixed into a class.


Example

class Base:
  def greet: String = "Hello"

class Child extends Base:
  abstract override def greet: String = super.greet + "!"

Error

-- [E064] Syntax Error: example.scala:5:24 -------------------------------------
5 |  abstract override def greet: String = super.greet + "!"
  |                        ^
  |             abstract override modifier only allowed for members of traits

Solution

// 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 + "!"