欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

scala java抽象理解_Scala之类、特质和抽象类

发布时间:2024/9/27 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 scala java抽象理解_Scala之类、特质和抽象类 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. 类

1.1. 类的定义

类的定义:

//定义Point类,构造器带有两个参数

class Point(var x: Int, var y: Int) {

//无返回值的类方法

def move(dx: Int, dy: Int): Unit = {

x = x + dx

y = y + dy

}

//没有参数但是返回值为String类型的重写方法

override def toString: String =

s"($x, $y)"

}

//创建类的实例

val point1 = new Point(2, 3)

point1.x // 2

println(point1) // prints (2, 3)

构造器可以带有默认值:

class Point(var x: Int = 0, var y: Int = 0){

...

}

val origin = new Point // x, y都取默认值0

val point1 = new Point(1)//x=1,y=0

println(point1.x) // prints 1

私有成员变量以及重新定义的Getter/Setter方法:

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 Point

point1.x = 99

point1.y = 101 // prints the warning

类定义中的其他细节:

//在Scala中,类并不用声明为public。

//Scala源文件中可以包含多个类,所有这些类都具有公有可见性。

class Person {

//用val修饰的变量是只读属性的,只带getter方法但没有setter方法

//(相当与Java中用final修饰的变量)

//字段必须初始化

val id = "1234"

//用var修饰的变量,默认同时有公开的getter方法和setter方法

var age: Int = 18

//类私有字段,有私有的getter方法和setter方法,只能在类的内部使用

private var name: String = "王老五"

//对象私有字段,访问权限更加严格的,Person类的方法只能访问到当前对象的字段

private[this] val hobby = "旅游"

}

scala中,在实现属性时你有如下四个选择:

(1) var foo: Scala自动合成一个getter和一个setter

(2) val foo: Scala自动合成一个getter

(3) 由你来定义foo和foo_=方法

(4) 由你来定义foo方法

1.2. 构造器

注意:

(1) 主构造器会执行类定义中的所有语句

(2) 主构造器如果有参数直接放置在类名之后

class ConstructorDemo ( val id: Int ) { … }

(3) 主构造器变成私有的,可以像这样放置private关键字:

class ConstructorDemo private ( val id: Int ) { … }

此时,用户必须通过辅助构造器来构造Person对象

class ConstructorDemo {

private var var1 = ""

private var var2 = 0

//辅助构造器1

def this(var1:String) {

this() //调用主构造器

this.var1 = var1

}

//辅助构造器2

def this(var1:String, var2:Int) {

this(var1) //调用辅助构造器1

this.var2 = var2

}

}

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

总结

以上是生活随笔为你收集整理的scala java抽象理解_Scala之类、特质和抽象类的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。