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方法返回的是伴生类对象
- 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)
- }
- }