Scala类和对象的学习

时间:2023-01-25 23:10:51
     Scala中类的概念和Java类似,但是和Java并不完全相同,其中涉及到了一些新的概念。    类、字段和方法    类似对象的蓝图,定义了类之后才能使用new来创建对象。类的定义里面,不管是字段还是方法都被称为成员,字段不管是用val还是var定义,都是指向对象的变量。方法使用def定义,包含了可执行的代码。    在scala中,public 是默认的访问级别,这一点与Java是不同的。java中默认的访问权限是包访问权限。    Scala中任何的方法参数都是val,因此在方法里面给这些参数重新赋值,编译是无法通过的。
def add(b:Byte):Unit={
   b=1    //编译无法通过,由于b为val值
}
    在scala中,如果没有发现任何显示的返回语句,Scala方法将返回最后一次计算得到的值。推荐的风格是尽量避免使用return,尤其是多条return,代之以每个方法当做是创建返回值的表达式。如果某个方法仅计算单个结果表达式,则可以去掉{},如果表达式很短,则可以放在def的同一行。
class ChecksumAccumulator{
   private var sum=0
   def add(b:Byte):Unit={
      sum+=b
   }
   def checksum():Int={
      return ~(sum&0xff)+1
  }
}
可以简化:
class ChecksumAccumulator{   private var sum=0   def add(b:Byte):Unit=sum+=b   def checksum():Int=~(sum&0xff)+1}对于add这样的结果类型为Unit的方法来说,执行的目的是为了他的副作用,此时可以去掉结果类型及等号,将方法体放在{}中,此时方法看上去就很向过程。
def add(b:Byte) {sum+=b}
需要注意的是,如果去掉{}前卖弄的“=”,则方法的结果类型一定是Unit,此时无论方法体两面是什么都是成立的。因此有返回值的时候一定不要忘记“=”

class Rational(n:Int,d:Int)  其中n和d成为类参数。如果类没有主体就不需要指定一对{}Scala的主构造器:Scala在类定义的时候就定义了类的主构造器Scala编译器会将类的内容既不是字段也不是方法定义的代码编译至主构造器中。Scala中的先决条件:    required(condition)  required方法带一个boolean类型的参数,若为真,将正常返回,否则会抛出IllegalArgumentException阻止对象被构造。从构造器:   Scala的辅助构造函数定义一般开始于def this() ,函数主体完全是主构造器的调用。   Scala中每个辅助构造器的第一个操作都是调用同类别的构造器,被调用的构造器既可以是主构造器也可以是源文件中早于调用构造器定义的其他辅助构造器,最终的结果是每个scala的构造器最终都会调用主构造器完成对象的构造,因此主构造器是类唯一的入口。   在scala中,字段、方法参数、本地变量以及函数的驼峰式命名最好以小写字符开始,如length,flatMap。类和特质的驼峰式命名应该以大写字母开始,如BigInt、List、Map等。   Java中常量名习惯全部大写,但是在scala中,比较推荐使用驼峰式风格(以大写字母开头)。