A Scala Class translates into an equivalent Java Class implementing scala.ScalaObject:
In Scala:
class TestScalaClass
if disassembled produces the following equivalent Java code:
public class TestScalaClass extends java.lang.Object implements scala.ScalaObject{
public TestScalaClass();
}
The Scala Object which is Scala’s in-language support for Singleton Pattern:
object TestScalaObject
compiles into two bytecode files: TestScalaObject.class and TestScalaObject$.class.
TestScalaObject.class disassembles into:
public final class TestScalaObject extends java.lang.Object{
}
whereas TestScalaObject$.class disassembles into:
public final class TestScalaObject$ extends java.lang.Object implements scala.ScalaObject{
public static final TestScalaObject$ MODULE$;
public static {};
}
MODULE$ makes Scala to be accessible through Java.