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之类、特质和抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年计算机应用基础统考题库,202
- 下一篇: 皮尔洛和c罗讲什么语言,皮尔洛:如果我跟