Skip to content

Latest commit

 

History

History
61 lines (43 loc) · 1.51 KB

杂记3——类.md

File metadata and controls

61 lines (43 loc) · 1.51 KB

杂记 3 —— 类

类与对象

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)
}

注意

  1. class 中调用无参方法,可以不带括号。无参方法看起来像属性

  2. 多个重写使用 with 连接

  3. 构造器上定义成员变量直接重写属性方法

object 本质 单例对象是一种特殊的类,有且只有一个实例。和惰性变量一样,单例对象是延迟创建的,当它第一次被使用时创建。