Scala中的构造器相较于Java比较特殊,分为两种:主构造器,从构造器。主构造器是和类中字段和方法的定义混合在一起的。
在Scala中,不需要像Java一样需要在类中定义一个与类名相同的方法来当作构造器。
主构造器的参数列表写在类名的后面,而构造器的内容,则直接写在类定义里面,所以说,一个Scala类里面,除了方法和字段的定义以外的代码,全都是主构造器的内容。
class Fruit(n: String, w: Int) { val name = n val weight = w println("This is a " + n) println("Weight = " + w) }
如果接下来定义一个Fruit对象。
val apple = new Fruit("Apple", 10)
则会在屏幕上打印:
This is a Apple
Weight = 10
因为
println("This is a " + n) println("Weight = " + w)
两行代码也是构造函数中的内容。
除了主构造器外,Scala中还有从构造器,用于使用和主构造器不同的参数来初始化对象。
从构造器的定义,都为def this开始。
例如,如果Fruit的默认重量为10。
class Fruit(n: String, w: Int) { val name = n val weight = w println("This is a " + n) println("Weight = " + w) def this(n: String) = this(n, 10) }
val orange = Fruit("Orange")
Scala上的从构造器也有一定的限制,Scala编程中写道。
“Scala 里的每一个从构造器的第一个动作都是调用同一个类里面其他的构造器。换句话说
就是,每个 Scala 类里的每个从构造器都是以“this(...)”形式开头的。被调用的构造
器既可以是主构造器(好像 Rational 这个例子),也可以是从文本上来看早于调用构造器
的其它从构造器。这个规则的根本结果就是每一个 Scala 的构造器调用终将结束于对类的
主构造器的调用。因此主构造器是类的唯一入口点。”
时间: 2024-10-18 06:48:07