在Scala 继承中子类如何覆盖抽象类中的属性和方法
1. 定义抽象类
类名:AICar
知识点:
- 抽象类的定义:使用
abstract class关键字定义抽象类。 - 抽象方法的定义:在抽象类中定义没有具体实现的方法。
- 具体方法的定义:在抽象类中定义有具体实现的方法。
参考点:
- 如何定义一个抽象类,包括具体属性、具体方法和抽象方法。
文章:
在Scala中,抽象类是一种不能被直接实例化的类,它们通常用作基类。以下是一个AICar抽象类的定义,它包含了具体属性、具体方法和抽象方法。
abstract class AICar() {
var brand = "x" // 具体属性
val color = "red" // 只读属性
var hasDriver: Boolean // 具体属性,没有具体实现
def run(): Unit = { // 具体方法,有具体实现
println("run......")
}
def autoRun: Unit // 抽象方法,没有具体实现
}
2. 定义派生类实现抽象类
类名:Model3
知识点:
- 派生类的实现:创建一个类来继承抽象类,并实现所有的抽象方法。
- 方法重写:使用
override关键字重写父类的方法。 - 属性重写:使用
override关键字重写父类的属性。
参考点:
- 如何创建一个派生类来实现抽象类,并重写其方法和属性。
文章:
在Scala中,派生类可以通过继承抽象类来获取其属性和方法,并根据需要进行重写。以下是一个Model3类,它继承自AICar抽象类,并实现了所有的抽象方法。
class Model3 extends AICar {
var hasDriver = false // 实现抽象属性
def autoRun: Unit = { // 实现抽象方法
println("Model3 的自动驾驶技术")
}
brand = "TSL" // 重写具体属性
override val color: String = "white" // 重写只读属性
override def run(): Unit = { // 重写具体方法
println(s"Model3 run ......${color} ${brand}")
}
}
3. 实例化派生类并调用方法
类名:Test19_3
知识点:
- 实例化派生类:创建派生类的实例。
- 方法调用:通过实例调用类的方法。
参考点:
- 如何实例化一个派生类并调用其方法。
文章:
在Scala中,可以通过new关键字来实例化一个派生类,并调用其方法。以下是一个示例,展示了如何创建Model3类的实例并调用其run方法。
object Test19_3 {
def main(args: Array[String]): Unit = {
val m1 = new Model3() // 实例化Model3对象
m1.run() // 调用run方法,输出:Model3 run ......white TSL
// m1.autoRun() // 可以调用autoRun方法,输出:Model3 的自动驾驶技术
}
}
完整代码块
// 定义一个抽象类AICar
abstract class AICar() {
// 定义一个可变属性brand
var brand = "x"
// 定义一个只读属性color
val color = "red"
// 定义一个可变属性hasDriver,具体实现由子类完成
var hasDriver: Boolean
// 定义一个具体方法run
def run(): Unit = {
println("run......")
}
// 定义一个抽象方法autoRun,具体实现由子类完成
def autoRun: Unit
}
// 定义一个子类Model3来实现抽象类AICar
class Model3 extends AICar {
// 实现抽象属性hasDriver
var hasDriver = false
// 实现抽象方法autoRun
def autoRun: Unit = {
println("Model3 的自动驾驶技术")
}
// 重写具体属性brand
brand = "TSL"
// 重写只读属性color
override val color: String = "white"
// 重写具体方法run
override def run(): Unit = {
println(s"Model3 run ......${color} ${brand}")
}
}
// 包含main方法的对象,用于演示抽象类和派生类的使用
object Test19_3 {
def main(args: Array[String]): Unit = {
// 实例化Model3对象
val m1 = new Model3()
// 调用run方法
m1.run()
// 调用autoRun方法
// m1.autoRun()
}
}
通过以上示例,我们可以看到Scala中抽象类的定义、派生类的实现以及如何实例化派生类和调用其方法的基本用法。这些概念是面向对象编程的基础,有助于构建更复杂的应用程序。
1522

被折叠的 条评论
为什么被折叠?



