- About Scala
- Documentation
- Code Examples
- Software
- Scala Developers
A Tour of Scala: Traits
Created by admin on 2008-07-05.
Updated: 2011-10-10, 11:37
Similar to interfaces in Java, traits are used to define object types by specifying the signature of the supported methods. Unlike Java, Scala allows traits to be partially implemented; i.e. it is possible to define default implementations for some methods. In contrast to classes, traits may not have constructor parameters.
Here is an example:
trait Similarity { def isSimilar(x: Any): Boolean def isNotSimilar(x: Any): Boolean = !isSimilar(x) }
This trait consists of two methods isSimilar
and isNotSimilar
. While isSimilar
does not provide a concrete method implementation (it is abstract in the terminology of Java), method isNotSimilar
defines a concrete implementation. Consequently, classes that integrate this trait only have to provide a concrete implementation forisSimilar
. The behavior for isNotSimilar
gets inherited directly from the trait. Traits are typically integrated into a class (or other traits) with a mixin class composition:
class Point(xc: Int, yc: Int) extends Similarity { var x: Int = xc var y: Int = yc def isSimilar(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x } object TraitsTest extends Application { val p1 = new Point(2, 3) val p2 = new Point(2, 4) val p3 = new Point(3, 3) println(p1.isNotSimilar(p2)) println(p1.isNotSimilar(p3)) println(p1.isNotSimilar(2)) }
Here is the output of the program:
false true true