📜  Scala 中的继承(1)

📅  最后修改于: 2023-12-03 15:05:04.501000             🧑  作者: Mango

Scala 中的继承

在 Scala 中,类可以继承自另一个类,从而获得父类的属性和方法。这种继承被称为单继承,即每个类只能有一个直接父类。

定义类的继承关系

通过 extends 关键字来定义类的继承关系。例如,下面的代码定义了一个 Person 类和一个 Student 类,Student 类继承自 Person 类。

class Person(val name: String, val age: Int)

class Student(name: String, age: Int, val id: String) extends Person(name, age)

上面的代码中,Student 类通过 extends 关键字继承了 Person 类。同时,Student 类还定义了一个额外的 id 属性,用于表示学生的学号。

重写方法

在子类中,可以重写父类的方法。例如,下面的代码中,Student 类重写了 toString 方法。

class Person(val name: String, val age: Int) {
  override def toString: String = s"$name, $age"
}

class Student(name: String, age: Int, val id: String) extends Person(name, age) {
  override def toString: String = s"${super.toString}, $id"
}

在上面的代码中,通过 override 关键字重写了 toString 方法,并使用 super.toString 调用父类的 toString 方法来获得父类中的值。

调用父类的构造方法

在子类中,需要调用父类的构造方法,可以使用 super 关键字来调用。例如,下面的代码中,Student 类在定义构造方法是,先通过 super 关键字调用父类的构造方法,然后再定义自己的 id 属性。

class Person(val name: String, val age: Int) {
  override def toString: String = s"$name, $age"
}

class Student(name: String, age: Int, val id: String) extends Person(name, age) {
  def this(name: String, age: Int) = this(name, age, "Unknown")

  override def toString: String = s"${super.toString}, $id"
}

在上面的代码中,Student 类定义了两个构造方法。第一个构造方法使用了父类的构造方法,并定义了自己的 id 属性。第二个构造方法调用了第一个构造方法,并将 id 属性设置为 Unknown

总结

通过继承,子类可以获得父类的属性和方法,并且可以重写父类的方法。同时,在子类中,需要调用父类的构造方法,可以使用 super 关键字。