scala基础6 —— 特质(接口)

Scala中没有接口,但通过特质trait实现类似功能。特质可多重继承,提供抽象和具体方法。类通过with关键字组合多个特质。特质的实现、字段及重写规则是其独特之处,字段在子类中成为其一部分,未初始化字段必须在子类中重写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特质trait

在scala中是没有接口的概念的,但是有着和接口类似的概念,那就是特质trait。
scala类和java一样,不允许多重继承。但是和java接口一样,可以实现任意多个特质。
和java接口不一样的地方是,scala特质可以提供方法和字段的实现,相当于特质可以同时有用抽象方法和具体方法。
一个简单的特质例子如下:

trait Drinker {
  def eat(food : String) // 特质方法没有实体某人为抽象
}

class Animal extends Drinker { // extends关键字
  def eat(food : String): Unit = {  // 不需要override
    println("animal eat food:" + food)
  }
}

如果一个类要继承多个特质,其他特质可以通过with关键字添加,比如:

trait Drinker {
  def eat(food : String)
}

class Animal extends Drinker with Cloneable with Serializable { // with关键字
  def eat(food : String): Unit = {
    println("animal eat food:" + food)
  }
}

特质的具体实现

  1. scala特质和java接口不一样的地方是scala的特质可以实现内部的方法,而且继承该特质的类可以使用该方法的实现。
  2. 如果继承的类要重写该特质的方法,需要override关键字。
  3. 经常特质中可以有很多具体的实现,这些实现可以依赖特质的抽象方法
    比如:
trait Logger {
  def log(msg : String)
  def info(msg : String): Unit = {
    log("INFO:" + msg)
  }
  def warn(msg : String): Unit = {
    log("WARN:" + msg)
  }
  def error(msg : String): Unit = {
    log("ERROR:" + msg)
  }
}

特质中的字段

  1. 特质中也可以定义字段,该字段可以是抽象的,也可以是具体的(即给出了初始值)。
  2. 特质中的字段被继承时,会加到子类当中,属于子类的一部分。
  3. 特质中为初始化的字段在子类当中必须被重写。
    weiwan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值