Scala中的类是创建对象的蓝本,其中可以包含方法、常量、变量、类型、对象、特质与类,这些被包含的内容称之为成员。
1 类定义
最低限度的类定义是一个关键字class与一个标识符。类名首字母应该大写。
# 最低限度类定义以及实例化
class User
# 创建类实例(使用关键字new)
val user1 = new User
note:因为没有定义构造器,所以User具有一个默认无参构造器。
# 定义类(包含构造器)
class Point(var x:Int, var y: Int) {
def move(dx:Int, dy:Int):Unit = {
x = x + dy
y = y + dy
}
override def toString: String = s"($x, $y)"
}
note:Point类具有四个成员:变量x与y,方法move与toString。
note:类的主构造位于类签名中。
2 构造器
构造器可以通过提供默认值来实现可选参数。
# 定义可选参数
class Point(var x: Int = 0, var y:Int = 0)
val origin = new Point
val point1 = new Point(1)
# 命名传值参数
val point2 = new Point(y=2)
note:因为x与y具有默认值,所以没有参数是必需的。
note:构造器从左向右读值,如果想要传入y,需要带名传值。
3 私有成员与Getter/Setter语法
成员默认是共有的,可以使用private访问修饰语将私有成员向类的外部隐藏。
# 定义类
class P {
private var _x = 0
private var _y = 0
private val bound = 100
def x = _x
def x_= (newValue: Int):Unit = {
if (newValue < bound) _x = newValue else printWarning
}
def y = _y
def y_= (newValue: Int): Unit = {
if(newValue < bound) _y = newValue else printWarning
}
private def printWarning = println("WARING: out of bounds")
}
note:数据存储在变量_x与_y。方法def x与def y用于访问私有数据。
note:def x_=与def y_=用于检验设置_x与_y的值。
note:setter的特殊语法:在getter方法标识符后添加_=,后再添加参数。
使用var或val的主构造器参数是公共的。不过,由于val不可改,所以不能重写。
不使用val或var的参数是私有值,只在类内部可见。