==== objects ===
Consider the following Scala object
object HelloObj {
val f = "one field";
val x = 3;
}
It gets compiled to two files, HelloObj.class and HelloObj$.class. The first of these only exists to make life easier for Java programmers.
public final class HelloObj extends java.lang.Object{
public static final int $tag();
public static final int x();
public static final java.lang.String f();
}
public final class HelloObj$ extends java.lang.Object implements scala.ScalaObject{
public static final HelloObj$ MODULE$;
public static {};
public HelloObj$();
public int x();
public java.lang.String f();
public int $tag();
}
Writing "HelloObj.x()" in Scala is the same as writing "HelloObj$.MODULE$.x()", but the former should probably be preferred for readability.
==== classes ====
Now the following two Scala classes ...
class Foo {
val x = "somefield"
final val xx = "finalField"
var z = 3;
final var zz = 3;
}
class Bar extends Foo {
override val x = "someOverridenValue"
}
get compiled to the following Java classes
public class Foo extends java.lang.Object implements scala.ScalaObject{
public Foo();
public final void zz_$eq(int);
public final int zz();
public void z_$eq(int);
public int z();
public final java.lang.String xx();
public java.lang.String x();
public int $tag();
}
public class Bar extends Foo implements scala.ScalaObject{
public Bar();
public java.lang.String x();
}