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)
}
}