class S { var var_n: Int = 10 val val_s: String = "hello" def m(n: Int) = n + 10 }上例中,我們宣告
1. 使用 var 宣告一個 data member 變數:var_n
2. 使用 val 宣告一個 data member 常數:val_s
3. 使用 def 宣告一個 method:m
在 Java 中,data member 與 method 的 name space 是不同的,所以 data member 與 method 可以同名。
但 Scala 中,data member 與 method 共用 name space,因此 Scala 中你不可以宣告 data member 與 method 同名。
其實,說清楚一點是,Scala 會為 data member 產生 access method。而所產生的 access method 會與 data member 同名。所以此時若再宣告同名的 method,將會造成兩個同名的 method,產生 compile 錯誤。
範例:Java 中,method 可以與 data member 同名。
class J { int n1 = 10; int n1() { return 10; } }
範例:Scala 中,method 不可以與 data member 同名。
class S { var n1 = 10 // compiler 會編譯本 statement 成為一個 bytecode 的 data member,以及至少一個 access method n1() def n1() = 10 // compiler 會認為此 statement 重複宣告 n1() }
沒有留言:
張貼留言