📅  最后修改于: 2023-12-03 15:05:04.501000             🧑  作者: Mango
在 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
关键字。