E231: Concrete Class Has Unimplemented Methods — 구현 안 된 추상 멤버가 남아 있어요

E231: Concrete Class Has Unimplemented Methods — 구현 안 된 추상 멤버가 남아 있어요

추상이 아닌 클래스나 객체가 트레이트나 추상 클래스를 상속했는데, 상속받은 추상 멤버 중 하나 이상을 구현하지 않으면 이 에러가 발생해요. 클래스는 상속받은 모든 추상 멤버를 자신이나 조상 중 하나에서 구현해야 합니다. 아니면 abstract로 선언해서 나머지 일을 하위 클래스에 넘겨야 해요.

출처: Scala 3 Reference

본문

Example

trait Animal:
  def name: String
  def sound: String

class Dog extends Animal

Dognamesound를 구현하지 않았어요.

Error

-- [E231] Declaration Error: example.scala:5:6 ---------------------------------
5 |class Dog extends Animal
  |      ^^^
  |     class Dog needs to be abstract, since it has 2 unimplemented members.
  |
  |     Members declared in Animal:
  |     - def name: String
  |     - def sound: String

Solution

빠진 멤버를 모두 구현하거나:

trait Animal:
  def name: String
  def sound: String

class Dog extends Animal:
  def name: String = "Rex"
  def sound: String = "Woof"

클래스를 abstract로 선언해 하위 클래스로 책임을 넘길 수 있어요.

trait Animal:
  def name: String
  def sound: String

abstract class Dog extends Animal