📜  Scala 中的抽象类(1)

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

Scala 中的抽象类

在 Scala 中,抽象类是一种不能被实例化的类,只能用作其他类的基类。抽象类通常用来定义一组共同的特征,而具体的实现则交由子类去提供。

声明抽象类

Scala 中可以通过 abstract 关键字来声明一个抽象类。例如:

abstract class Animal {
  def sayHello(): Unit
}

以上代码定义了一个抽象类 Animal,其中包含一个抽象方法 sayHello()。由于该方法没有具体的实现,所以 Animal 是一个抽象类。

继承抽象类

在 Scala 中,可以使用 extends 关键字来继承一个抽象类。如果一个非抽象类继承了一个抽象类,则必须实现父类中的所有抽象方法,否则该子类也必须是抽象类。

以下代码展示了如何继承抽象类 Animal

class Dog extends Animal {
  override def sayHello(): Unit = {
    println("Woof!")
  }
}

子类 Dog 继承了 Animal,并重写了父类中的抽象方法 sayHello()。现在,我们就可以创建一个 Dog 对象并调用 sayHello() 方法了。

val dog = new Dog()
dog.sayHello() // 输出: Woof!
抽象字段

除了抽象方法,Scala 中也支持抽象字段。抽象字段是没有初始化值的字段,它们只有类型和名称,具体的实现由子类去提供。

以下代码展示了如何定义抽象字段:

abstract class Vehicle {
  val maxSpeed: Int
}

定义了一个抽象类 Vehicle,其中包含一个抽象字段 maxSpeed。由于该字段没有初始化值,所以 Vehicle 是一个抽象类。

class Car extends Vehicle {
  override val maxSpeed: Int = 160
}

子类 Car 继承了 Vehicle,并提供了 maxSpeed 字段的具体实现。现在,我们可以创建一个 Car 对象并访问 maxSpeed 字段:

val car = new Car()
println(car.maxSpeed) // 输出: 160
总结

Scala 中的抽象类是一种不能被实例化的类,只能作为其他类的基类。抽象类通常用来定义一组共同的特征,而具体的实现则交由子类去提供。抽象类可以包含抽象方法和抽象字段,它们都没有具体的实现,而该具体实现由子类去提供。