Visibility rules
There are times when we don't want to let another class or similar construct use a few members. Here, we can use Scala's provided access modifiers. How we achieve control over the accessibility of members of our classes/traits/objects is through private
, public
, or protected
access modifiers. Take a look at the following example:
package restaurant package privaterestaurant { case class Dish(name: String) trait Kitchen { self: PrivateRestaurant => private val secret = "Secret to tasty dish" //Think of a secret logical evaluation resulting in value, we don't want to expose. def cookMyDish: Option[Dish] = Some(Dish(secret)) } class PrivateRestaurant extends Kitchen { def serveDishWithSecret = Dish(secret) // Symbol secret is inaccessible from this place. def serveDish = cookMyDish // Works fine } }
Here, we have some trait named Kitchen
. It has a secret way of cooking a really tasty dish, but only for PrivateRestaurant...