Scala学习笔记(六):对象

本文介绍Scala中的单例对象及其用途,包括工具函数存放、高效共享实例及服务协调等场景。同时探讨伴生对象的概念,如何实现类与静态方法的结合,并解释类与伴生对象间的私有特性的访问。

6.1单例对象

scala没有静态方法或静态字段,可以使用object这个语法来达到同样的目的。对象定义了某个类的单个实例,包含了你想要的特性。

object Accounts{

private var lastNumber=0

def newUniqueNumber()={lastNumber+=1;lastNumber}

}

对象的构造器在对象第一次被使用的时候执行,在本例中Accounts的构造器在Accounts.newUNIQUEnumber()首次调用时执行。如果一个个对象从来没被使用,构造器也不会被执行。

对象本质上拥有类的所有特性,甚至可以扩展其它类或特质。只有一个例外:你不用提供构造器参数。

什么情况下使用对象:1.作为存放工具函数或常量的地方

                                     2.高效的共享单个不可变实例

                                     3.需要用单个实例来协调某个服务时。

6.2伴生对象

在Jave中,通常会遇到既有实例方法又有静态方法的类=。在Scala中,你可以通过类和类的伴生对象来达到同样的目的。列如:

class Account{

val id=Account.newUniqueNumber()

private var balance=0.0

def deposit(amout:Double) { 

balance+=amout }

...

}

object Account{     //伴生对象

private var lastUmer=0 

private def newUniqueNumbe() ={ lastNumber+=1;lastNumber}

类和他的伴生对象可以相互访问私有特性,他们必须在同一个源文件中,

说明:类的伴生对象可以被访问,但并不在作用域中。举例来说:Account类必须通过Account.newUniqueNumbe()而不是直接使用newUniqueNumber()来调用伴生对象的方法。

6.3扩展类或特质的对象

一个object可用扩展类以及一个或多个特质,其结果是一个扩展了指定类以及特质的类的对象。

6.4apply方法

我们通常会使用对象的apply方法,当遇到如下的表达式,apply方法就会被调用:

Object(参数1,....参数n)

通常,这个一个apply方法返回的是伴生类的对象。

6.5 应用程序

每个scala程序都有必须从一个对象的main方法开始,这个方法的类型Array[String]=>Unit:

object Hello extends App {

def main(args:Array[String]):Unit{

}

}

如果在调用应用程序设置了scala.time选项的话,程序退出会显示逝去的时间。

$ scala -Dscala.time Hello Fred

App特质扩展自另一个特质DelayeInit,编译器对该特质有特殊处理。

6.6枚举

scala没有枚举类型,不过,标准类库提供了一个Enumeration助手类,可以用于产生枚举。

定义一个扩展Enumeration类的对象并以value方法调用初始化枚举中的所有可选值。例如:

object TrafficLightColor extends Enumeration{

val red,Yellow,Green=Value

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值