Scala_类和对象

Posted 9981-lyq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala_类和对象相关的知识,希望对你有一定的参考价值。

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

 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   

 

以上是关于Scala_类和对象的主要内容,如果未能解决你的问题,请参考以下文章

scala编程——类和对象

一天学完spark的Scala基础语法教程十类和对象(idea版本)

Scala 学习 -- 样例类和模式匹配

Scala 学习 -- 样例类和模式匹配

Scala 编程类和对象

Scala 系列—— 类和对象