Scala 組合和繼承–定義參數(shù)化成員變量

2018-09-28 18:26 更新

組合和繼承–定義參數(shù)化成員變量

我們回到前面定義的類 ArrayElement,它有一個(gè)參數(shù) conts,其唯一的目的是用來復(fù)制到 contents 成員變量。而參數(shù)名稱 conts 是為了讓它看起來和成員變量 contents 類似,而有不至于和成員變量名沖突。

Scala 支持使用參數(shù)化成員變量,也就是把參數(shù)和成員變量定義合并到一起來避免上述代碼:

class ArrayElement(val contents: Array[String]) 
  extends Element {
}

要注意的是,現(xiàn)在參數(shù) contents 前面加上了 val 關(guān)鍵字,這是前面使用同名參數(shù)和同名成員變量的一個(gè)縮寫形式。使用 val 定義了一個(gè)無法重新賦值的成員變量。這個(gè)成員變量初始值為參數(shù)的值,可以在類的外面訪問這個(gè)成員變量。它的一個(gè)等效的實(shí)現(xiàn)如下:

class ArrayElement(val x123: Array[String]) 
  extends Element {
   val contents: Array[String] = x123
}

Scala 也允許你使用 var 關(guān)鍵字來定義參數(shù)化成員變量,使用 var 定義的成員變量,可以重新賦值。此外 Scala 也允許你使用 private,protected,override 來修飾參數(shù)化成員變量,和你定義普通的成員變量的用法一樣。 比如:

class Cat {
  val dangerous =false
}
class Tiger (
  override val dangerous: Boolean,
  private var age: Int
) extends Cat

這段代碼中 Tiger 的定義其實(shí)為下面類定義的一個(gè)縮寫:

class Tiger(param1: Boolean, param2: Int) extends Cat { 
    override val dangerous = param1 
    private var age = param2 
}            

兩個(gè)成員都初始化自相應(yīng)的參數(shù)。我們?nèi)我膺x擇了這些參數(shù)名,param1 和 param2。重要的是它們不會(huì)與范圍內(nèi)的任何其它名稱沖突。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)