Scala的继承

6.3.1 扩展类

在Scala中、扩展类的方法和Java一样都是使用extends关键字

6.3.2 重写方法

在Scala中重写一个非抽象的方法必须使用override修饰符

6.3.3 类型检查和转换

6.3.4 超类的构造    trait相当于java中抽象类,它们的区别是 trait可以在抽象类写入方法,也可以不写,再继承后写,根据当时编码情况   一个抽象类中可以有多个方法

package pricate.超类
trait Monkey {
  def up(): Unit ={
    println("你要上天,挑战我的脾气")
  }
}
package pricate.超类
trait Animal {
  def fly(): Unit ={
    val a="小熊猫"
    println("是家禽类,人们会做成烤鸭")
  }
   def sheep(): Unit ={
     println("老虎、熊猫")
   }
}
package pricate.超类
class Chinese extends  Animal with Monkey {
  override def fly(): Unit = super.fly()
  override def sheep(): Unit = super.sheep()
  override def up(): Unit = super.up()
}
 object Chinese{
   def main(args: Array[String]): Unit = {
     var c=new Chinese
     c.fly()
     c.sheep()
     c.up()
   }
}

------------------------------------------------------------------------------------------------------------------

在不在抽象类中写方法体内容

### Scala中的继承与多态 #### 的定义与继承Scala中,可以通过`extends`关键字实现之间的继承关系。子可以继承的所有成员(除了私有成员),并可以选择性地覆盖某些方法或属性。为了覆盖一个非抽象方法,必须使用`override`修饰符[^4]。 以下是简单的继承示例: ```scala class Animal { def makeSound(): Unit = { println("Some generic animal sound") } } class Dog extends Animal { override def makeSound(): Unit = { println("Bark!") } } ``` #### 方法重 当子需要改变父的行为时,可以通过方法重来实现这一目标。需要注意的是,在Scala中,只有标记为`override`的方法才能被覆盖。如果未标注`override`而尝试覆盖方法,则会引发编译错误[^5]。 继续上面的例子,假设有一个新的动物别——猫(`Cat`),它可以发出“Meow!”的声音: ```scala class Cat extends Animal { override def makeSound(): Unit = { super.makeSound() // 调用父方法 println("Meow!") // 添加自己的行为 } } ``` #### 多态的表现形式 多态允许同一接口表示不同型的对象。这意味着你可以编通用代码处理各种派生自共同基底的不同实体。例如,创建一个接受任何种动物作为参数并将它们发声的功能非常简单[^2]: ```scala def makeAnimalSound(animal: Animal): Unit = { animal.makeSound() } val dog = new Dog() val cat = new Cat() makeAnimalSound(dog) // 输出 "Bark!" makeAnimalSound(cat) // 输出 "Some generic animal sound\nMeow!" ``` #### Trait 的混入 Traits 是一种用于组合功能的强大工具。它们似于Java中的接口,但是更加灵活,因为traits不仅可以声明方法签名还可以提供默认实现。更重要的是,多个trait可以在单个里混合在一起形成复合型[^3]。 下面展示如何利用Trait扩展日志记录能力到我们的例子当中去: ```scala trait Logger { def log(msg: String): Unit = { println(s"[LOG]: $msg") } } class LoggedDog extends Dog with Logger {} val loggedDog = new LoggedDog() loggedDog.log("This is a logged message.") // 输出 "[LOG]: This is a logged message." ``` 通过上述介绍可以看出,Scala 提供了一套完整的机制支持面向对象编程范式的两大核心特性—继承和多态,这使得开发者能够构建高度模块化的软件架构[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值