📜  Scala继承(1)

📅  最后修改于: 2023-12-03 14:47:17.734000             🧑  作者: Mango

Scala继承

在Scala中,继承是面向对象编程的核心概念之一。它允许一个类继承另一个类的属性和方法,从而实现代码重用和代码结构的层级关系。

基本语法

要将一个类定义为另一个类的子类,需要使用extends关键字。例如:

class Person(val name: String)

class Employee(override val name: String, val salary: Double) extends Person(name)

在上面的例子中,我们定义了一个Person类和一个Employee类。Employee类继承自Person类,使用extends关键字。我们还使用override关键字重写了Person类的name属性,以便可以在Employee类中使用它。

方法重写

当一个子类继承一个父类的方法时,它可以重新定义该方法,以修改其行为。这被称为方法重写。例如:

class Person(val name: String) {
  def sayHello(): Unit = {
    println("Hello, " + name + "!")
  }
}

class Employee(override val name: String, val salary: Double) extends Person(name) {
  override def sayHello(): Unit = {
    println("Hi, my name is " + name + ", and my salary is " + salary + "!")
  }
}

在上面的例子中,我们定义了Person类和Employee类,它们都有一个sayHello()方法。在Employee类中,我们使用override关键字重写了Person类的sayHello()方法,在该方法中添加了员工的薪水信息。

抽象类和特质

Scala还提供了抽象类和特质的概念。抽象类是不能被实例化的类,它只能用作父类。特质是一种类似于Java的接口,用于定义一组特定的行为。

要将一个类定义为抽象类,需要在类名之前添加abstract关键字。例如:

abstract class Person(val name: String) {
  def sayHello(): Unit
}

在上面的例子中,我们将Person类定义为抽象类,该类具有一个抽象的sayHello()方法。

要定义一个特质,需要使用trait关键字。例如:

trait Greeting {
  def sayHello(name: String): Unit = {
    println("Hello, " + name + "!")
  }
}

在上面的例子中,我们定义了一个Greeting特质,它具有一个带有name参数的sayHello()方法。

使用super关键字

当一个子类重写了父类的方法时,可以使用super关键字来引用父类的方法。例如:

class Person(val name: String) {
  def sayHello(): Unit = {
    println("Hello, " + name + "!")
  }
}

class Employee(override val name: String, val salary: Double) extends Person(name) {
  override def sayHello(): Unit = {
    super.sayHello()
    println("Hi, my name is " + name + ", and my salary is " + salary + "!")
  }
}

在上面的例子中,我们在Employee类中使用super关键字来调用Person类的sayHello()方法,然后再添加员工的薪水信息。