private
字段,生成 private 的 getter/setterval
字段,只生成 getterprivate[this]
字段,不生成 getter/setter@bean.BeanProperty
註解可生成符合 JavaBean 規範的 get/set 方法(加上默認的兩個方法,共四個方法)this
,只是參數不一樣private[this] val
字段self =>
自身類型,區分調用的內部類和外部類的字段、方法等class
或多個 trait
Accounts.newUniqueNumber()
而不是 newUniqueNumber()
apply
方法
Object(arg1, ..., argN)
, 返回伴生類的實例,如 Array(1,2,3)
new
關鍵字,在嵌套表達式中很方便extends App
Enumeration
幫助類實現Enumeration.Value(ID, name)
內部類, ID 依次累加, 默認 0 開始;name 默認是字段名trait
中未實現的方法默認是抽象的 (abstract)trait
,從最後一個開始調用
extends
關鍵字實現override
關鍵字trait
則對其餘的 trait
使用 with
關鍵字trait
使用trait
,從最後一個開始調用trait
的狀況下,super.someMethod
會根據從右向左的順序調用下一個 trait
的方法
trait
存在抽象方法,則子trait
需使用 abstract override
關鍵字,不然 super.someMethod
沒法編譯trait
也有構造器
trait
從左向右,有父 trait
的先構造,共享的父 trait
只構造一次 > 子類trait
可繼承類,混入該 trait
的類都是被繼承類的子類,子類若是有繼承其餘的類也必須是被繼承類的子類trait
不繼承類,直接在 body 內定義 this: Type =>
,則混入的類必須是該 Type 類型的/子類型的this: { def log(msg: String) } =>
,則混入的類必須包含結構類型中定義的方法trait
最終會翻譯成類和接口package
包名和文件路徑並不必定對應java.lang
, scala
, Predef
始終默認會導入collection.mutable
實際是 scala.collection.mutable
package a.b.c
與 package a { package b { package c {}}}
不一樣
package a
或 package b
中定義的資源可在帶括號的包聲明中訪問,但 package a.b.c
沒法訪問private[package.name]
限制資源的可見性import
collection.mutable
import collection.mutable._
selector
import java.awt.{Color, Font}
import java.util.{HashMap => JavaMap}
import java.util.{HashMap => _, _}
// 避免產生混淆java.lang
, scala
和 Predef
scala
路徑
fragile base class
基類被繼承以後,修改基類可能會對子類形成沒法預期的影響java
extends
關鍵字
final
類不能被繼承, final
字段、方法不能被覆蓋override
關鍵字abstract
關鍵字;子類覆蓋時也能夠省略 override
abstract
關鍵字,子類覆蓋式也可省略 override
super
關鍵字isInstanceOf
, asInstanceOf
;獲取類型, classOf
protected
不一樣於 Java,受保護成員在包內不可見def
只能覆蓋 def
val
只能覆蓋 無參數的 def
var
只能覆蓋 抽象的 var
繼承層級git
Any
定義了 asInstanceOf
, isInstanceOf
,判斷相等,hash值等方法AnyRef
是除基礎類型外全部類的父類,等價於 java.lang.Object
wait
, notify/notifyAll
,synchronized
AnyVal
不包含任何方法,只是個值類型的標記ScalaObject
這個標記接口,該接口無任何方法Null
的惟一實例 null
,可分配給引用類型,但不可分配給值類型(Int
不可爲 null
)Nothing
無實例,在泛型構造時有用,Nil
類型爲 List[Nothing]
???
方法聲明返回類型爲 Nothing
, 無返回值,會拋出 NotImplementedError
,用於預留未實現的方法Unit
表明空/void
,類型惟一值爲 ()
Any
或 AnyRef
, 當傳遞多個參數時,會被替換爲 tuple
equals
和 hashCode
判斷對象相等
equals
equals
參數類型爲 Any
而不是具體的類型##
是 hashCode
的安全版本,遇到 null
會返回 0 而不是拋出異常AnyVal
equals
和 hashCode
比較實際值class a(x: Int, y: Int)
設計爲 class a(x: X, y: Y)
,定義值類 X
, Y
避免混淆參數