這篇要談的就是 class 的宣告。啊?太快?太硬?
之前文章曾經提過,Scala 中所有的東西都是 object,所以 class 是它最本的結構。
在 Java 程式中,所有的東西都要定義在 class 中,Scala 也是同樣的情況,所有的東西都要定義在 class 中。因此我們決定從最基礎的 class 談起。
讓我們先看一下 Java 中 class 的宣告方式
class J1 { int n1; void p1(int x) { System.out.println("p1:" + x); } }
上例宣告一個 class J1
J1 裡面有一個 data field 叫 n1
J1 裡面有一個 method 叫 p1
p1 的 return type 為 void(就是沒有return值)
p1 有一個 int 型態的參數x
Scala 的 class 宣告方式與 Java 宣告在含意上非常像,我們先看例子
class S1 { var n1: Int = 10 def p1(x: Int): Unit = { Console.println("p1:" + x) } }上例宣告一個 class S1
S1 裡面有一個 data field 叫 n1,起始值為10
S1 裡面有一個 method 叫 p1
p1 的 return type,為 Unit(Unit後面會討論到)
p1 有一個 Int 型態的參數 x
雖然 Scala 的 class 宣告方式與 Java 不太一樣,但精神卻是一致的。
讓我們一個個來看
1.宣告 class 的方式,在 Scala 中與 Java 一樣都是使用 class 這個 key word.
2.宣告變數的方式有更改, 使用 var 宣告
3.宣告 method 的方式有更改,使用 def 宣告
接下來看繼承的方式
Java 的繼承方式
class J2 extends J1 { void p2() { System.out.println("p2"); } }
Scala 的繼承方式
class S2 extends S2 { def p2(): Unit = { Console.println("p2") } }Scala 繼承方式與 Java 很像,都是使用 extends 這個 key word。
有了宣告 class 與繼承的方式,那麼 implements interface 的部份呢?
interface 的觀念在 Scala 中做了大幅度的修正,觀念也不同了,這部份比較複雜,我們以後的篇幅,再詳論 Java 的 interface 在 Scala 如何修正的。
以下幾篇我們將詳論 Scala 在 class 宣告中各個組成份子。請記得是 Scala 的 class 宣告與繼承與 Java 的方式非常類似,都是使用 class 與 extends,但 interface 的部份,Scala 已經大幅修改。
沒有留言:
張貼留言