How to extend a Java interface like a Scala trait

This is an excerpt from the Scala Cookbook (partially modified for the internet). This is a very short recipe, Recipe 8.9, “How to extend a Java interface like a Scala trait.”

Problem

You want to implement a Java interface in a Scala application.

Solution

In your Scala application, use the extends and with keywords to implement your Java interfaces, just as though they were Scala traits.

Given these three Java interfaces:

// java
public interface Animal {
    public void speak();
}

public interface Wagging {
    public void wag();
}

public interface Running {
    public void run();
}

you can create a Dog class in Scala with the usual extends and with keywords, just as though you were using traits:

// scala
class Dog extends Animal with Wagging with Running {
    def speak { println("Woof") }
    def wag { println("Tail is wagging!") }
    def run { println("I'm running!") }
}

The difference is that Java interfaces don’t implement behavior, so if you’re defining a class that extends a Java interface, you’ll need to implement the methods, or declare the class abstract.

The Scala Cookbook

This tutorial is sponsored by the Scala Cookbook, which I wrote for O’Reilly:

You can find the Scala Cookbook at these locations:

Add new comment

The content of this field is kept private and will not be shown publicly.

Anonymous format

  • Allowed HTML tags: <em> <strong> <cite> <code> <ul type> <ol start type> <li> <pre>
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.