本关任务:编写一个能继承的对象程序。 相关知识 为了完成本关任务,你需要掌握:继承。 Scala继承 Scala支持单继承,而不是多重继承。 子类可以只有一个父类。 Scala类层次结构的根是Any,没有父类。 class Vehicle (speed : Int){ val mph :Int = speed def race() = println("Racing") } Vehicle类采用一个参数,即车辆的速度。 创建类Vehicle的实例时,必须传递此参数,如下所示: new Vehicle(100) 该类包含一个方法,称为race。 扩展类 Scala扩展类的方式和Java一样,使用extend关键字: class Employee extends Person { val salary = 0.0 } 如上面代码所示,和Java一样在定义中给出了子类需要而父类没有的字段和方法,或者根据实际情况重写父类中的方法。 我们也可以将类声明为final,这样就不可以被扩展了(即不可被其他类继承),当然也可以在单个字段或者方法上声明final,以确保他们不被重写。 注意:Java中final字段是不可变的,类似Scala中的val。 重写方法 在Scala中重写一个非抽象方法必须使用override修饰符。例如: class Person { def description() = "this is a person." } class Employee extends Person { val salary = 0.0 override def description(): String = "this is a employee" } override修饰符可以在多个常见情况下给出有用的错误提示,包括: 当你拼错了要重写的的方法名。 当你不小心在新方法中使用了错误的参数类型。 当你在超类中引入了新的方法,而这个新的方法与子方法相抵触。 在Scala中调用超类的方法和Java一样,使用super关键字: class Person { def description():String = "this is a person." def name(): String = { "jason" } } class Employee extends Person { val salary = 0.0 override def description(): String = { super.name // 调用父类中的name方法 "this is a employee" } } 编程要求 题目:完成Fn类的max方法。返回最大值。并创建ZiOne对象,继承至Fn的max方法。 根据提示,在右侧编辑器补充代码,完成函数。class Fn { def max(int1: Int, int2: Int): Int = { // 返回最大值 /********* Begin **********/ /********* End **********/ } } /********* Begin **********/ /********* End **********/ object Student { def main(args: Array[String]) { val obj1 = new ZiOne(); // 继承父类的方法 val resoult = obj1.max(2, 9); println(resoult); } }
时间: 2025-04-06 22:00:41 浏览: 28
### Scala 中的继承与方法重写
在 Scala 中,通过 `extends` 关键字可以让一个类继承另一个类。子类会自动获得父类的所有字段和方法,并且可以通过定义相同签名的方法来覆盖(重写)父类的行为[^1]。
#### 示例代码:实现继承与方法重写
以下是完整的代码示例,展示如何在 Scala 中实现继承并重写方法:
```scala
// 定义父类 FuOne 并提供 max 方法供子类重写
class FuOne {
// 定义默认的 max 方法
def max(a: Int, b: Int): Int = {
if (a > b) a else b
}
}
// 子类 ZiOne 继承自 FuOne 并重写 max 方法
class ZiOne extends FuOne {
override def max(a: Int, b: Int): Int = {
// 使用绝对值比较两个数的最大值
if (Math.abs(a) > Math.abs(b)) Math.abs(a) else Math.abs(b)
}
// 添加子类独有的方法
def showMaxResult(): Unit = {
println(s"The maximum absolute value is ${max(-10, 7)}") // 调用重写的 max 方法
}
}
```
#### 测试代码
以下是如何测试上述代码的功能:
```scala
object TestInheritance {
def main(args: Array[String]): Unit = {
val ziOneInstance = new ZiOne()
// 调用父类方法
println(ziOneInstance.max(3, 8)) // 输出 8
// 调用子类重写后的 max 方法
println(ziOneInstance.showMaxResult()) // 输出 The maximum absolute value is 10
}
}
```
#### 解析
1. **继承机制**
子类 `ZiOne` 使用 `extends` 关键字继承了父类 `FuOne` 的所有成员函数和变量。
2. **方法重写**
在子类中使用 `override` 关键字声明要覆盖父类中的同名方法。这里重新实现了 `max` 方法逻辑,使其返回两数绝对值较大的那个数值。
3. **调用父子类方法**
当创建 `ZiOne` 对象时,默认情况下优先调用的是子类中被重写过的方法版本。如果没有显式标注 `override` 或者未修改行为,则直接沿用父类原始实现。
---
###
阅读全文
相关推荐



















