类与对象
abstract class
可定义抽象方法与非抽象方法或属性方法(无参方法)
case class
构造器,成员变量,一些方法
Sealed class
Sealed 可以修饰 class 与 trait,保证了只能在当前文件中被继承。
object
定义 apply update 等静态方法
trait
可以定义抽象方法与紧密联系的相关方法
type 别名 如果子类与父类实际上没有区别,类型别名是优于继承的。
比如:可以由父类直接得到
type Map[A, +B] = immutable.Map[A, B]
type Set[A] = immutable.Set[A]
val Map = immutable.Map
val Set = immutable.Set
比如:由于是增加一个属性,可通过继承父类
class Point(xc: Int, yc: Int) {
val x: Int = xc
val y: Int = yc
def move(dx: Int, dy: Int): Point =
new Point(x + dx, y + dy)
}
class ColorPoint(u: Int, v: Int, c: String) extends Point(u, v) {
val color: String = c
def compareWith(pt: ColorPoint): Boolean =
(pt.x == x) && (pt.y == y) && (pt.color == color)
override def move(dx: Int, dy: Int): ColorPoint =
new ColorPoint(x + dy, y + dy, color)
}
注意
-
class 中调用无参方法,可以不带括号。无参方法看起来像属性
-
多个重写使用 with 连接
-
构造器上定义成员变量直接重写属性方法
object 本质 单例对象是一种特殊的类,有且只有一个实例。和惰性变量一样,单例对象是延迟创建的,当它第一次被使用时创建。