26.scala编程思想笔记——构造器
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50445767
源码下载连接请见第一篇笔记。
每个对象都有其自己与外界隔离的空间。程序就是对象的集合,每个对象的正确初始化可以解决初始化问题的一大部分。
构造器是构造新对象的代码。
在域中,构造器将域初始化为指定的值,或者在未指定值的情况下初始化为缺省值。在类参数中,构造器默默地初始化参数并使它们对其他对象是可访问的,需要对可变元参数列表进行解释。
例如:
import com.atomicscala.AtomicTest._
class Coffee(val shots:Int = 2,
val decaf:Boolean = false,
val milk:Boolean = false,
val toGo:Boolean = false,
val syrup:String = "") {
var result =""
println(shots, decaf, milk, toGo, syrup)
defgetCup():Unit = {
if(toGo)
result += "ToGoCup "
else
result +="HereCup "
}
defpourShots():Unit = {
for(s <-0 until shots)
if(decaf)
result+= "decaf shot "
else
result+= "shot "
}
defaddMilk():Unit = {
if(milk)
result +="milk "
}
defaddSyrup():Unit = {
result +=syrup
}
getCup()
pourShots()
addMilk()
addSyrup()
}
val usual = new Coffee
usual.result is "HereCup shot shot "
val mocha = new Coffee(decaf = true,
toGo = true,syrup = "Chocolate")
mocha.result is
"ToGoCup decaf shot decaf shot Chocolate"
执行如下:
[root@OEL examples]# scala Coffee.scala
(2,false,false,false,)
HereCup shot shot
(2,true,false,true,Chocolate)
ToGoCup decaf shot decaf shot Chocolate
其中这些方法对类参数具有访问权限,因此无需传递类参数,并且可以将result当做对象的域一样使用。
当Coffee构造器执行完毕时,可以保证类体已经成功运行,并且所有恰当的初始化都已经完成。
如果所有参数都是缺省的,可以声明不使用括号的new coffee.