类定义
- Scala类中访问属性默认为public,有别于Java的默认访问属性是default
- 对var字段会生成get、set方法
- 对val字段生成get方法
- 重新一个非抽象方法必须使用override关键字
override def method1:String={} - 重写一个用abstract声明的抽象类中的抽象方法时,不需要override关键字
构造器
- scala中的类不需要明确声明一个主构造器,而是直接将构造参数通过构造参数列表声明为类的一部分
- 直接写在类体中的既不是类的成员变量也不是成员函数的部分,会自动收集为构造函数的体
- scala里主构造器之外的构造器被称为辅助构造器。
- Scala的辅助构造器定义开始于 def this(参数){this(同类构造器参数)}
- Scala里每个辅助构造器的第一行必须调用其它辅助构造器或主构造器
静态类
- scala中的类通过class关键字定义,但类中不能定义静态成员(或静态方法),但可以定义到单例对象中
- 单例对象需要通过object关键字来声明
- 一个单例对象可以单独存在,也可以绑定到一个类上
- 当一个单例对象和某个类写在同一个源文件中且共享同一个名字时,他们就产生了一个绑定的关系
- 此时单例对象称为该类的伴生对象。类称为该单例对象的伴生类
- 单例对象当中的所有方法,都可以不需要创建对象而直接通过object单例对象的名字直接来调用
- 类和他的伴生对象可以互相访问其私有成员
接口
- 特质 trait可以类比java中的interface,
java中称为类实现了接口,scala中称类混入了特质 - 与java中的接口不同的是,scala中的特质可以有有方法体的方法
- 在类中可以通过extends或 with 关键字来让类混入特质(scala中可以通过extends混入特质)
- 一个类的声明中只能有一个 extends,但是可以有多个with
泛型
scala中泛型是用方括号引起来的,如:val arr = ArrayString
懒加载
- val 和 var定义的量加上lazy关键字
- 后续真正用到这个量时才真正开辟空间赋值,减少了内存的浪费
样例类
- 声明类时,在class关键字前加上case关键字,这个类就成为了样例类
- 样例类必须要显式的声明一个主构造器,同时会默认隐式的声明一个空辅助构造器
- 样例类默认实现序列化接口
- 样例类实体化时,不用带new关键字
Option类
- Option在Scala中有两个结果Some和None
- Some表示有返回值,None表示没有返回值