大數據Scala系列之類
1. 類的定義
Scala 拜訪裝飾符根本和Java的一樣,差別有:private,protected,public。
假如沒有指定拜訪裝飾符符,默認場合下,Scala 對象的拜訪級別都是 public。
私有(Private)成員
用 private 要害字裝飾,帶有此標誌的成員僅在涵蓋了成員定義的類或對象內部可見,同樣的條例還實用內部類。
class Outer{
class Inner{
private def f(){println(“f”)}
class InnerMost{
f() 準確
}
}
(ne Inner).f() 過錯
}
(ne Inner).f( ) 拜訪不正當是由於 f 在 Inner 中被宣示為 玩運彩 合法private,而拜訪不在類 Inner 之內。
但在 InnerMost 里拜訪 f 就沒有疑問的,由於這個拜訪涵蓋在 Inner 類之內。
Java中許可這兩種拜訪,由於它許可外部類拜訪內部類的私有成員。
保衛(Protected)成員
在 scala 中,對保衛(Protected)成員的拜訪比 java 更嚴峻一些。由於它只許可保衛成員在定義了該成員的的類的子類中被拜訪。而在java中,用protected要害字裝飾的成員,除了定義了該成員的類的子類可以拜訪,同一個包里的其他類也可以進行拜訪。
package p{
class Super{
protected def f() {println(“f”)}
}
class Sub extends Super{
f()
}
class Other{
(ne Super).f() 過錯
}
}
類的定義示例:
定義Point類,組成器帶有兩個參數
class Point(var x Int, var y Int) {
無回去值的類想法
def move(dx Int, dy Int) Unit = {
x = x + dx
y = y + dy
}
沒有參數不過回去值為String類型的重寫想法
overre def toString String =
s”($x, $y)”
}
創造類的實例
val poin足球 運彩 大小t1 = ne Point(2, 3)
point1.x 2
println(point1) prints (2, 3)
組成器可以帶有默認值:
class Point(var x Int = 0, var y Int = 0){
…
}
val origin = ne Point x, y都取默認值0
val point1 = ne Point(1)x=1,y=0
println(point1.x) prints 1
私有成員變量以及從頭定義的GetterSetter想法:
private var _x = 0
private var _y = 0
private val bound = 100
def x = _x
def x_= (neValue Int) Unit = {
if (neValue < bound) _x = neValue else printWarning
}
def y = _y
def y_= (neValue Int) Unit = {
if (neValue < bound) _y = neValue else printWarning
}
private def printWarning = println("WARNING Out of bounds")
}
val point1 = ne Point
point1.x = 99
point1.y = 101 prints the arning
類定義中的其他細節:
在Scala中,類并不用聲明為public。
Scala源文件中可以包含多個類,所有這些類都具有公有可見性。
class Person {
用val修飾的變量是只讀屬性 的,只帶getter方法但沒有setter方法
(相當與Java中用final修飾的變量)
字段必須初始化
val = "1234"
用var修飾的變量,默認同時有公開的getter方法和setter方法
var age Int = 18
類私有字段,有私有的getter方法和setter方法,只能在類的內部使用
private var name String = "王老五"
對象私有字段,訪問權限更加嚴格的,Perso發票中獎查詢n類的方法只能訪問到當前對象的字段
private val hobby 運彩玩法介紹= “旅游”
}
scala中,在實現屬性時你有如下四個選擇:
var foo Scala自動合成一個getter和一個setter
val foo Scala自動合成一個getter
由你來定義foo和foo_=方法
由你來定義foo方法
2. 構造器
注意:
1.主構造器會執行類定義中的所有語句
2.主構造器如果有參數直接放 置在類名之后
class ConstructorDemo ( val Int ) { … }
3.主構造器變成私有的,可以像這樣放 置private關鍵字:
class ConstructorDemo private ( val Int ) { … }
此時,用戶必須通過輔助構造器來構造Person對象
class ConstructorDemo {
private var var1 = “”
private var var2 = 0
輔助構造器1
def this(var1String) {
this() 調用主構造器
this.var1 = va運彩 讓分r1
}
輔助構造器2
def this(var1String, var2Int) {
this(var1) 調用輔助構造器1
this.var2 = var2
}
}