Learn Java for Web Development

(Tina Meador) #1
APPENDIX C: Introduction to Scala 431

Traits


Say you want to add another class to your vehicle hierarchy. This time you want to add a batmobile.
A batmobile can race, glide, and fly. But you cannot add glide and fly methods to the Vehicle class
because in a nonfictional world, Car and Bike do not glide or fly. Not yet at least. So, if you want to
add Batmobile to your vehicle hierarchy, you can use a trait. Traits are like interfaces in Java that can
also contain code. In Scala, when a class inherits from a trait, it implements the interface of the trait
and inherits all the code contained in the trait. Listing C-13 shows flying and gliding traits.


Listing C-13. Scala Traits


trait flying {
def fly() = println("flying")
}


trait gliding {
def gliding() = println("gliding")
}


Now you can create the Batmobile class that extends Vehicle class along with the flying and
gliding traits, as shown in Listing C-14.


Listing C-14. Using Traits



  1. Batmobile(speed : Int) extends Vehicle(speed) with flying with gliding{

  2. override val mph: Int = speed

  3. override def race() = println("Racing Batmobile")

  4. override def fly() = println("Flying Batmobile")

  5. override def glide() = println("Gliding Batmobile")



  6. }


You can now create a batmobile in the REPL, as illustrated here:


scala> val vehicle3 = new Batmobile(300)


vehicle3: Batmobile = Batmobile@374ed5


Now you can access the fly() method of Batmobile, as illustrated here:


scala> vehicle3.fly()


Flying Batmobile


Create a list of vehicles, and then you can use the maxBy() method provided by the Scala collections
library to find the fastest vehicle in the list.

Free download pdf