Scala學習之類和屬性篇(六):對象私有成員變量

在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}
相關文章
相關標籤/搜索