【scala专栏_持续更新】18_scala特质trait

【大纲】
在这里插入图片描述

【正文】

1.【结论】应用场景

现有一个父类Animal{name; age; eat();},子类Monkey,子类Cat。Monkey后来学会了play(),拥有了star成员变量,但是需要在在不影响袁继承体系和类的前提下,让Monkey拥有play()和star。就可以定义一个特质trait,star和play()做特质的成员,Monkey再继承特质

2.【结论】作用

0.提高代码复用性

1.解耦、提高扩展性和可维护性

3.【结论】语法

0.定义特质
    trait 特质名{
        普通字段
        抽象字段
        普通方法
        抽象方法
    }

1.继承特质
    class/object 类名 extends 特质A with 特质B{
        重写抽象字段
        重写抽象方法
        ...
    }

# 注意:
    
    1.scala特质中,可以有普通字段、普通方法、抽象字段、抽象方法。当然,特质中也可以只有普通成员,或只有抽象成员
    
    2.只有抽象成员的特质叫瘦接口;既有抽象成员又有普通成员的特质叫富接口
    
    3.类可多继承trait,一个类继承多个trait就叫叠加特质
    
    4.类必须重写所有trait的抽象成员

示例

# 类继承单特质
object Trait {
  
  // 定义特质
  trait Logger{
    val name:String = "im log"
    val length:Int
    def log(msg:String)
  }
  // 定义类继承特质
  class ConsoleLogger extends Logger{
    // 重写特质所有抽象成员
    override val length: Int = 5
    override def log(msg: String): Unit = {
      println(msg)
    }
  }
  def main(args: Array[String]): Unit = {
    val logger = new ConsoleLogger
    logger.log("im here") // 效果:im here
  }
}
# 类继承多个特质
object Trait {
  // 定义特质1
  trait MessageSender{
    def send(msg:String)
  }
  // 定义特质2
  trait MessageReceiver{
    def receive
  }
  // 定义类继承多个特质
  class MessageWorker extends MessageSender with MessageReceiver{
    // 重写所有抽象方法
    override def send(msg: String): Unit = {
      println("发送:" + msg)
    }
    override def receive: Unit = {
      println("消息已收到")
    }
  }
  def main(args: Array[String]): 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheese海盐芝士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值