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.