Scala类
来源:互联网 发布:windows arping 编辑:程序博客网 时间:2024/06/17 00:11
- 定义类
- 构造函数
- 私有成员和GetterSetter语法
Scala中的类用于创建对象。类中可以包含方法,值,变量,类型,对象,特征以及类,统称为成员。类型,对象和特征稍后介绍。
定义类
最简单的类定义只有关键字class
和一个标识符。类名应该大写。
class Userval user1 = new User
关键字new
用于创建类的实例。因为没有定义构造函数,所以User
类有一个默认的不带参数的构造函数。不过,多数时候你会想要构造函数和类主体。下面定义了示例类Point
:
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) // prints (x, y)
Point
类包含4个成员:变量x
,y
以及方法move
和toString
。和很多语言不同的,主构造函数在类的签名(var x: Int, var y: Int)
中。move
方法带两个参数并返回Unit
值()
,不承载任何信息.类似Java这类语言中的void
。toString
不带任何参数但是返回一个String
值。因为toString
重写了AnyRef
的toString
,所以需要用override
关键字标记。
构造函数
构造函数可以通过提供默认值来包含可选参数,像这样:
class Point(var x: Int = 0, var y: Int = 0)val origin = new Point // x and y are both set to 0val point1 = new Point(1)println(point1.x) // prints 1
在这个版本的Point
类,x
和y
都有默认值0
,所以没有参数是必须要传的。不过,由于构造函数从左到右读取参数,所以如果你想只传y
的值,需要使用命名参数。
class Point(var x: Int = 0, var y: Int = 0)val point2 = new Point(y=2)println(point2.y) // prints 2
这也是提高清晰度的好方法。
私有成员和Getter/Setter语法
成员默认是公有的,使用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
这个版本的Point
类,数据存储在私有变量_x
和_y
中。方法def x
和def y
用于访问私有数据。def x_=
和def y_=
用于验证并设置_x
和_y
的值。注意setter的特殊语法:在getter标识符后附加_=
的方法,后面紧跟着参数。
带val
和var
的主构造函数参数是公有的。不过,val
是不可变的,所以你不能像下面这样写。
class Point(val x: Int, val y: Int)val point = new Point(1, 2)point.x = 3 // <-- does not compile
不带val
和var
的参数是私有值,只在类中可见。
class Point(x: Int, y: Int)val point = new Point(1, 2)point.x // <-- does not compile
- Scala类
- Scala类
- Scala类
- Scala: 类
- scala类
- Scala类
- Scala 类
- Scala-类
- 【Scala】Scala的类层级
- [Scala]Scala学习笔记四 类
- Scala学习(五)---Scala中的类
- scala的类
- Scala 集合类
- Scala 类认识
- [scala之四]类
- Scala详解---------类
- Scala 类初体验
- Scala 类的继承
- AppUasge统计app的使用情况,启动次数,启动时间
- Spark-SQL之DataFrame操作大全
- 深拷贝和浅拷贝的几个实例
- 利用java反射机制写的一个实体类属性拷贝的工具
- 学习定时任务(Quartz)
- Scala类
- python——接收处理外带的参数
- 图论学习(二)在Boost Graph中返回连通子图序列
- 【学习笔记07】java面向对象-继承
- mysqld --initialize 执行失败
- Java字符串去除中文
- httpclient 以及 urlConnection 发送请求
- 磁疗是真的吗?磁刺激技术在神经疾病方面的研究与应用
- Java方向如何准备BAT技术面试答案(汇总版)