類是對象的抽象,而對象是類的具體實例。類是抽象的,不佔用內存,而對象是具體的,佔用存儲空間。java
1 import scala.beans.BeanProperty 2 3 class ChecksumAccumulator(xc: Int, yc: Int){ 4 // Scala 的類定義能夠有參數,稱爲類參數,如上面的 xc, yc,類參數在整個類中均可以訪問。 5 6 // 必須初始化字段,生成面向JVM的類時候,會生成一個私有字段name和對應的公有getter、setter方法,getter,setter方法分別叫作name,name_ 7 private var sum=0 8 9 // val修飾的只生成getter方法 10 val name = "" 11 12 // 將私有字段的getter和seeter改爲公有方法 13 private var privateHeigth = 0.0 14 // 從新定義getter和setter 15 // 定義getter 16 def heigth = privateHeigth 17 // 自定義setter方法的時候必定要注意scala的語法限制,簽名、=、參數間不能有空格(這個很是重要) 18 def heigth_=(heigth : Double) { 19 privateHeigth = heigth 20 } 21 22 // Scala的getter和setter方法的命名與java是不一樣的,是field和field_=的方式 23 // 若是要讓scala自動生成java風格的getter和setter方法,只要給field添加@BeanProperty註解便可 24 // 此時會生成4個方法 25 // sex: String 26 // sex_=(newValue: String): Unit 27 // getSex(): String 28 // setSex(newValue: String): Unit 29 30 @BeanProperty var sex : String = _ 31 32 var x : Int = xc 33 var y : Int = yc 34 35 // 沒有返回值的函數,能夠省略掉=,所以若是你但願函數返回某個值,但忘了方法定義中的「=」,Scala 會忽略方法的返回值,而返回 Unit。 36 def add(b:Byte) :Unit ={ 37 // 要注意的 Scala 的方法的 參數都是 val 類型,而不是 var 類型,所以在函數體內不能夠修改參數b的值 38 // 結尾,也不須要使用 return返回值,函數的最後一行的值就做爲函數的返回值 39 sum +=b 40 41 } 42 43 def move(dx: Int, dy: Int) { // move 方法沒有返回值 44 x = x + dx 45 y = y + dy 46 println ("x 的座標點: " + x); 47 println ("y 的座標點: " + y); 48 } 49 def checksum() : Int = ~ (sum & 0xFF) +1 50 } 51 52 object Test { 53 def main(args: Array[String]) { 54 val pt = new ChecksumAccumulator(10, 20); // 使用new建立類的對象 55 // 移到一個新的位置 56 pt.move(10, 10); 57 } 58 } 59 60 61