中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員大數據教程Scala系列之類

發布時間:2020-08-03 23:03:43 來源:網絡 閱讀:108 作者:wx5da18b5c4b01e 欄目:大數據

好程序員大數據教程Scala系列之類

  1. 類的定義

Scala 訪問修飾符基本和Java的一樣,分別有:private,protected,public。

如果沒有指定訪問修飾符符,默認情況下,Scala 對象的訪問級別都是 public。

私有(Private)成員

用 private 關鍵字修飾,帶有此標記的成員僅在包含了成員定義的類或對象內部可見,同樣的規則還適用內部類。

class Outer{
class Inner{
private def f(){println("f")}
class InnerMost{
f() // 正確
}
}
(new Inner).f() //錯誤
}

(new 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{
(new 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類型的重寫方法

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中,在實現屬性時你有如下四個選擇:

var foo: Scala自動合成一個getter和一個setter

val foo: Scala自動合成一個getter

由你來定義foo和foo_=方法

由你來定義foo方法

  1. 構造器
    注意:

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
}

}

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海南省| 章丘市| 平湖市| 科技| 边坝县| 牟定县| 徐闻县| 商河县| 普陀区| 奎屯市| 万载县| 合阳县| 满洲里市| 富锦市| 绵阳市| 萍乡市| 陵水| 齐齐哈尔市| 景泰县| 嵊泗县| 淮安市| 平和县| 汪清县| 买车| 肇州县| 偃师市| 瑞昌市| 余姚市| 古交市| 大厂| 桂阳县| 南和县| 拜城县| 嵩明县| 黎川县| 宜兴市| 洛南县| 新建县| 正安县| 井陉县| 望江县|