📅  最后修改于: 2023-12-03 14:47:17.133000             🧑  作者: Mango
在 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 中的抽象类是一种不能被实例化的类,只能作为其他类的基类。抽象类通常用来定义一组共同的特征,而具体的实现则交由子类去提供。抽象类可以包含抽象方法和抽象字段,它们都没有具体的实现,而该具体实现由子类去提供。