Skip to main content

Scala Traits and Java Interfaces

Posted by lifemichael on October 16, 2010 at 5:08 PM PDT

It seems that when we develop a trait (that includes both abstract and concrete methods) in Scala and compile it, the outcome includes two jave byte code files. The first includes the definition of an interface with an identical name to the one we gave our trait. The abstract methods that interface includes are the same methods defined in our trait. The other file includes the definition of a class that contains static methods for each one of the implemented methods in our trait. The name of that class starts with the name of our trait appended with '$class'. Given all that, we can take it into consideration when writing code in Java that uses a trait defined in Scala.

This video clip uses the Scala plugin for the Eclipse IDE (gallileo). During the course of using that plugin I found a small bug. It didn't recognize the new additional class that was generated due to the fact that the trait included a method together with implementation.

More relevant training material can be found in my Scala Fundamentals course, available for free personal and academic usage at