trait
is like a Java interface
but allows
mixin composition.
scala> trait Foo { def bar(n: Int): String } defined trait Foo scala> trait Bar defined trait Bar scala> trait Baz extends Foo with Bar { val baz: java.util.LinkedList[Int] } defined trait Baz
class
is similar to a Java class
, however case class
has no Java
equivalent.
scala> case class Person(name: String, age: Int) defined class Person scala> val p = Person("Bob", 42) p: Person = Person(Bob,42) scala> val z = p.name z: String = Bob
A sealed
class
or trait
restricts possible subtypes to the
declaring source file. Java has an obtuse equivalent by exploiting the fact that only nested classes may
subclass a class with an inaccessible constructor.
sealed
types and case class
are used to denote
Algebraic Data Types.