Scala(2)-类
来源:互联网 发布:2017程序员笔记本推荐 编辑:程序博客网 时间:2024/05/18 10:15
- 定义一个类
- 构造器
- 私有成员和GetterSetter
Scala是面向对象的语言。类是创建对象的模板。
定义一个类
最简单的类定义只有一个class
关键字和一个表示类名的标识符。类名首字母要大写。
class Userval user1 = new User
关键字new
用于创建类的一个对象。上面例子中,因为没有特意定义一个构造器,所以User类有个不含参数的默认构造器。
下面我们再看一个比较完整的类的定义:
class Point(var x: Int, var y: Int) { def move(dx: Int, dy: Int): Unit = { x = x + dx y = y + dy } override def toString: String = s"($x, $y)"}val point1 = new Point(2, 3)point1.x // 2println(point1) // (2, 3)
这个叫做Point的类有4个成员:变量x、y和方法move、toString。和许多其它语言不同的是,Scala的主构造器在类签名处 (var x: Int, var y: Int)。move 方法接收两个整型参数并返回一个Unit类型的值(),类似于Java或C中返回void。toString方法不接收任何参数但返回一个String类型的值。由于toString方法重写了父类AnyRef
中的toString方法,一次前面有个override关键词。
构造器
可以为构造器提供默认参数,像下面这样:
class Point(var x: Int = 0, var y: Int = 0)val origin = new Point // x和y都是0val point1 = new Point(1)println(point1.x) // 1
class Point(var x: Int = 0, var y: Int = 0)val point2 = new Point(y=2)println(point2.y) // 2
私有成员和Getter/Setter
类成员默认访问权限是public的。使用private 访问限定符可以将类成员隐藏起来,类外面不可见。
class Point { 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("WARNING: Out of bounds")}val point1 = new Pointpoint1.x = 99point1.y = 101 // prints the warning
在上面的例子中,数据保存在私有变量_x
和 _y
中。通过方法def x 和def y 来访问私有数据,也就是说它们是Getter方法。def x_= 和def y_= 用于对_x
和 _y
进行验证和设置,它们是Setter方法。注意Setters的特殊语法:在Getter方法标识符后面缀上_=
,然后再接上参数。
主构造器中有val
和var
修饰的参数是public的。此外,由于vals关键字表示不可变,我们不能这样写:
class Point(val x: Int, val y: Int)val point = new Point(1, 2)point.x = 3 // 试图修改不可变对象,报错
没有val
和var
修饰的参数是私有的,仅在类内可见。
class Point(x: Int, y: Int)val point = new Point(1, 2)point.x // 编译不过
阅读全文
0 0
- Scala(2)-类
- Scala学习笔记2--类
- Scala类
- Scala类
- Scala类
- Scala: 类
- scala类
- Scala类
- Scala 类
- Scala-类
- Scala(2)
- scala-2
- 【Scala】Scala的类层级
- Coursera Scala 2-5,6:类
- Scala 自学笔记2_类
- [Scala]Scala学习笔记四 类
- Scala学习(五)---Scala中的类
- scala编程系列(2)-scala数组Array
- Python 25行代码实现图片转字符画
- Docker中安装OpenvSwitch 附rpm文件下载
- spring boot项目实战:redis
- Go语言 channel详解
- 工作中遇到的问题总结
- Scala(2)-类
- LeetCode#86 Partition List (week4)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B Coin(逆元,费马小定理)
- Dropout和Batch Normalization的差别
- Codeforces 230D Planets【思维+SPFA】
- Android 广播的生命周期
- Hadoop安装教程链接参考
- CSDN博客配置 添加邮箱
- UVa512 Spreadsheet Tracking