Start learning free

LESSON 647 OF 677 · OBJECT-ORIENTED PROGRAMMING

Interfaces in Scala

Lesson

TL ; DR:

An interface (in Scala, usually a trait) is a pure contract — a list of methods that a class promises to implement, with no shared data and no shared code. Unlike inheritance ("is a"), interfaces express "can do".


trait Speaker {
    def speak(): Unit
}
class Dog extends Speaker {
    override def speak(): Unit = {
        println("Woof")
    }
}


Full lesson:

An interface defines what a class can do, not how it does it or what it is. A Truck, a Robot, and a Drone aren't the same kind of thing — but they can all move(). You'd put move() in a Movable trait and have each one implement it.

Interface vs abstract class

Abstract classInterface
Has fieldsYesUsually no
Has method bodiesYes (some)No (or default impls only)
Multiple "inheritance"Usually noYes — a class can implement many interfaces
Models"is a""can do"

A class inherits from at most one parent class but can implement many interfaces. That's why interfaces are the right tool for cross-cutting capabilities like Comparable, Serializable, Iterable, etc.

The language landscape

  • C# / Java — first-class interface keyword. C# uses : for both inheritance and implementation; Scala uses extends for both a parent class and the first trait, then with for further traits (there is no implements).
  • Python — no separate interface; abstract base classes (ABCs) with all-abstract methods serve the same role.
  • Scala — no interface keyword; a trait with abstract methods plays that role, and a class can mix in several traits.
  • C++ — a class with only pure-virtual methods is an interface. Multiple inheritance lets a class implement several.

Your task

The Speaker trait is already declared. Create a Dog class that extends it, with a speak() method that prints "Woof".

Expected output:

Woof
STEP 1 OF 2
    Ctrl + Enter to check