溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Scala object的繼承方法是什么

發(fā)布時(shí)間:2021-12-08 15:31:32 來源:億速云 閱讀:251 作者:iii 欄目:云計(jì)算

這篇文章主要介紹“Scala object的繼承方法是什么”,在日常操作中,相信很多人在Scala object的繼承方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Scala object的繼承方法是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

一、單例對(duì)象

在Scala當(dāng)中沒有靜態(tài)屬性或方法,如果需要的話,可以通過object來實(shí)現(xiàn)。另外,如果你需要用到單例,也可以用object來實(shí)現(xiàn)??偨Y(jié):object = static+singleton

object ObjectTest {
  var name = ""
  var age = 0
  def main(args : Array[String]){
    println("I am an object")
  }
}

二、伴生對(duì)象

那么在java當(dāng)中,我們有很多的類,既需要靜態(tài)方法,又需要實(shí)例方法。這樣的情況,在Scala當(dāng)中可以通過伴生對(duì)象的方式來實(shí)現(xiàn)。類和它的伴生對(duì)象必須存在于同一個(gè)文件當(dāng)中。

class ObjectTest{
  var name = ""
  var age = 0
}

object ObjectTest {
  var name = ""
  var age = 0
  def main(args : Array[String]){
    val o = new ObjectTest
    o.name = "bajie"    
    o.age = 100
    
    ObjectTest.name = "wukong"
    ObjectTest.age = 500
    
    println(o.name, o.age)
    println(ObjectTest.name, ObjectTest.age)
  }
}

三、object的繼承

object可以擴(kuò)展類或一個(gè)或多個(gè)特質(zhì)(類似于java當(dāng)中的interface,但是可以有方法的實(shí)現(xiàn))

trait Machine {
  def play()
}

object TV extends Machine {
  override def play() = { println("gaoqing playing") }
}

四、apply

這里涉及到伴生對(duì)象的一個(gè)具體的應(yīng)用,而且其應(yīng)用范圍非常廣泛, ObjectTest("bajie", 100) 和 ObjectTest.apply("bajie", 100) 其實(shí)是等價(jià)的。

class ObjectTest(val name: String, var age : Int){
  override def toString() = name + " is " + age + " years old."
}

object ObjectTest {
 
  def main(args : Array[String]){
    println(ObjectTest("bajie", 100))
    println(ObjectTest.apply("bajie", 100))
  }
 
  def apply(name:String, age: Int) = {
    new ObjectTest(name, age)
  }
}

五、枚舉

Scala當(dāng)中沒有枚舉類型,它提供了一個(gè)助手類來完成枚舉的工作。scala.Enumeration.

object EnuTest extends Enumeration {
  val Red, Yellow, Green = Value
 
  def main(args : Array[String]){
    println(doWhat(Red))
    println(doWhat(Yellow))
    println(doWhat(Green))
  }
 
  def doWhat(color: EnuTest.Value) = {
    color match{
      case Red => "Stop"
      case Yellow => "Wait"
      case Green => "Go"
    }
  }
}

請(qǐng)注意,Value不是一個(gè)屬性,而是一個(gè)方法,每次調(diào)用它會(huì)生成一個(gè)新的ID,在這段代碼當(dāng)中3個(gè)枚舉值的id依次為0,1, 2,而枚舉值的類型是 EnuTest.Value。

六、package object

這個(gè)東西該怎么理解,首先回顧一下object,我們把它理解為 static+singleton,那么package object應(yīng)該是隸屬于某一個(gè)package的單例對(duì)象,同時(shí)可以把該package需要的一些靜態(tài)方法,放入其中。另外每一個(gè)package只能有一個(gè) package object,它的位置在package內(nèi)部,文件名=package.scala。

其他方面與普通的object并無不同。

到此,關(guān)于“Scala object的繼承方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)
AI