Fork me on GitHub

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)
    }
}
posted @ 2018-09-10 15:06  codegeekgao  阅读(7401)  评论(0编辑  收藏  举报