在Scala中,使用private關鍵字修飾的成員變量只能夠被這個類的實例訪問。也就是說,這個類的任意一個實例均可以訪問這個類在任意實例中定義的私有成員變量。this
下面這個例子中,isHigher方法就引用了此類的其餘實例中的price變量。scala
scala> :paste // Entering paste mode (ctrl-D to finish) class Stock { private var price: Double = _ def setPrice(p: Double) {price =p} def isHigher(that: Stock): Boolean = {this.price > that.price} } // Exiting paste mode, now interpreting. defined class Stock scala> val s1 = new Stock() s1: Stock = Stock@72f46e16 scala> val s2 = new Stock() s2: Stock = Stock@791cbf87 scala> s1.setPrice(10) scala> s2.setPrice(50) scala> s1.isHigher(s2) res2: Boolean = false
那麼咱們如何定義對象私有的成員變量呢,那就是使用private[this]關鍵字。這時候,成員變量就只能在對象的實例內部來訪問。在同類的其餘實例中就不能再引用這個成員變量了。code
scala> :paste // Entering paste mode (ctrl-D to finish) class Stock { private[this] var price: Double = _ def setPrice(p: Double) {price =p} def isHigher(that: Stock): Boolean = {this.price > that.price} } // Exiting paste mode, now interpreting. <console>:15: error: value price is not a member of Stock def isHigher(that: Stock): Boolean = {this.price > that.price}