Scala的靜態方法和實例方法


Scala的對象學習

Scala沒有靜態方法或靜態字段,可以使用object這個語法達到相同的目的,對象定義了某個類的單個實例

 object Accounts {

  private var lastNumber = 0

  /**
    * 定義一個getNumber的方法
    *
    * @return
    */
  def getNumber(): Int = {
    lastNumber += 1
    lastNumber
  }

  def main(args: Array[String]): Unit = {
    // 相當於java靜態方法調用
   println(Accounts.getNumber())
  }

在java中,通常會出現一個類即有實例方法又有靜態方法的類,在Scala中可以使用類和同名的伴生對象達到相同的目的

class Account {
// 實例方法
    ......
}
object Account {
// 靜態方法
    ......
}

類和它的伴生對象可以相互訪問私有特性,但前提是它們都在同一個源文件中

  • 抽象類
abstract class UndoableAction(val description: String) {
    def undo(): Unit
    def redo(): Unit
}

object DoNothing extends UndoableAction("Do nothing") {
    override def undo() {}
}
// 打開和保存功能尚未實現
val actions = Map("open" -> DoNothing,"save" -> DoNothing)
  • apply方法
通常一個apply方法返回的是伴生類對象
Array("Mary","had","little")
Array(100) 和new Array(100) 兩者是不同的概念,前一個表達式調用的是apply(100),輸出一個單元素整數100的Array[Int],而第二個表達式調用的是this(100),包含了100個null元素
以下是apply方法的示例
class Account private (val id:Int,initialBalance:Double){
    ......
}
 
 // 伴生對象
object Account {
    def apply(initialBalance:Double) = {
        new Account(1,initialBalance)
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM