Scala trait特性

博客介绍了Scala Trait(特征)的概念,它类似Java接口但功能更强,可定义属性和方法实现,类能继承多个Trait实现多重继承。还给出了Trait使用的举例,如带属性带方法实现、带方法不实现等,同时提到继承多个同名成员需用override重定义,Trait不可传参。

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

 

1.概念理解

  • Scala Trait(特征)相当于Java的接口,实际上他比接口还要功能强大。
  • 与接口不同的是,它还可以定义属性和方法的实现。
  • 一般情况下Scala的类可以继承多个Trait,从结果来看就是实现了多重继承。
  • Trait(特征)定义的方式与类类似,但他使用的关键字trait。

2.举例

trait中带属性带方法实现

  • 注意:继承的多个trait中如果有同名的方法和属性,必须要在类中使用"override"重新定义。
  • tait中不可以传参数
object Test1 {
  def main(args: Array[String]): Unit = {
    val person = new Person()
    person.read("zhangsan")
    person.listen("lisi")
    println(person.listenType)
    println(person.readType)
    println(person.gender)
  }
}

trait Read {
  val readType = "Read"
  val gender = "m"

  def read(name: String) {
    println(name + " is reading")
  }
}

trait Listen {
  val listenType = "Listen"
  val gender = "m"

  def listen(name: String): Unit = {
    println(name + " is listening")
  }
}

class Person() extends Read with Listen {
  override val gender: String = "f"
}

trait中带方法不实现

object Test1 {
  def main(args: Array[String]): Unit = {
    val p1 = new Point(1, 2)
    val p2 = new Point(1, 3)
    println(p1.isEqule(p2))
    println(p1.isNotEqule(p2))

  }
}

trait Equle {
  def isEqule(x: Any): Boolean

  def isNotEqule(x: Any) = {
    !isEqule(x)
  }
}

class Point(x: Int, y: Int) extends Equle {
  val xx = x
  val yy = y

  def isEqule(p: Any) = {
    p.isInstanceOf[Point] && p.asInstanceOf[Point].xx == xx
  }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值