Scala 类

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的参数是私有值,只在类内部可见。

翻译源:Scala Tour

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/83341259