好程式設計師大資料教程Scala系列之類
好程式設計師大資料教程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方法
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
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2660968/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料教程Scala系列之繼承程式設計師大資料繼承
- 好程式設計師大資料教程分享Scala系列之閉包程式設計師大資料
- 好程式設計師大資料教程Scala系列之高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料分享Scala系列之柯里化程式設計師大資料
- 好程式設計師大資料教程分享Scala系列之Option_偏函式_String程式設計師大資料函式
- 好程式設計師大資料教程分享Scala系列之檔案以及正規表示式程式設計師大資料
- 好程式設計師大資料教程Scala系列之方法的巢狀和方法多型程式設計師大資料巢狀多型
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料教程Scala系列之隱式轉換和隱式引數程式設計師大資料
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料學習路線分享Scala系列之對映Map程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之基礎篇程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之集合操作函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料教程分享之Hadoop優缺點程式設計師大資料Hadoop
- 好程式設計師大資料教程分享實用的大資料之陣列程式設計師大資料陣列
- 好程式設計師web前端教程JavaScript系列之HTTP程式設計師Web前端JavaScriptHTTP
- 好程式設計師大資料教程分享大資料之流程控制程式設計師大資料
- 好程式設計師Java教程系列之異常定義程式設計師Java
- 好程式設計師大資料教程分享:HDFS基本概念程式設計師大資料
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師Java教程分享Java之包裝類與常用類程式設計師Java
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料學習資料之YARN資源管理程式設計師大資料Yarn
- 好程式設計師大資料教程分享HadoopHDFS操作命令總結程式設計師大資料Hadoop
- 好程式設計師大資料教程:SparkShell和IDEA中編寫Spark程式程式設計師大資料SparkIdea
- 好程式設計師Java實用教程系列之物件的轉型程式設計師Java物件
- 好程式設計師大資料學習路線分享scala單列和伴生物件程式設計師大資料物件
- 好程式設計師大資料學習路線之mapreduce概述程式設計師大資料
- 好程式設計師大資料筆記之:Hadoop叢集搭建程式設計師大資料筆記Hadoop
- 好程式設計師Python教程系列分享之Python語言元素之運算子程式設計師Python
- 好程式設計師Python教程系列分享之Python語言元素之變數程式設計師Python變數
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 大資料Scala系列之樣例類_Option_偏函式大資料函式