文章目录
- 类,对象
- 定义类
- 构造
- 定义方法
- 重写方法
- 私有
- 默认参数
类,对象
scala定义类的关键字是:class
使用类实例化对象使用关键字:new
定义类
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 // 2
println(point1) // prints (2, 3)
构造
与python不同,构造方法直接在类的定义中设计,x,y,val x, var y 证明如果实例化后,x,y这俩属性还可以重新赋值,但是如果使用val x,val y 定义那么实例后,这俩属性就完全无法修改了。当使用val,var定义此成员为公有成员,否则为私有成员。
定义方法
使用def进行定义move方法,move方法接收两个参数dx,dy
重写方法
关键字override覆盖重写方法
私有
关键字private,可以使属性,方法变成私有方法 类似python中的__
,不可再外部调用
默认参数
定义类时设置参数默认值,注意从Java代码中调用时,Scala中的默认参数则是必填的
私有成员定义
//x,y因为有var定义为公有,z为私有
class Point(var x: Int = 0, var y: Int = 0,z:Int=0)
class Point {
//_x,_y不能直接调用
private var _x = 0
private var _y = 0
private val bound = 100
//通过共有成员调用私有
def x(): Int ={ _x}
//定义z不带()调用时候也不能带()
def z = _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 Point
println(point1.x())
//调用时也不带()
println(point1.z)
point1.x_=(1000)
ex:
class TestClassAtt(var x:Int,y:Int) {
def add():Int={
x+y
}
def printlninfo():Unit={
println(x,y)
}
def get_private_y():Int={
y
}
def public_func_a(): Int = {
_private_func_a()
}
private def _private_func_a():Int={
println("私有方法")
x+x+y
}
}
object App2{
def main(args: Array[String]):Unit={
val ldsx_clinet = new TestClassAtt(6,7)
println(ldsx_clinet.x)
println(ldsx_clinet.get_private_y())
println(ldsx_clinet.add)
ldsx_clinet.printlninfo()
println(ldsx_clinet.public_func_a())
}
}