首页 > 其他 > 详细

Scala_特质

时间:2019-03-03 17:13:18      阅读:185      评论:0      收藏:0      [点我收藏+]

特质

特质概述

  • Java中提供了接口,允许一个类实现任意数量的接口

  • 在Scala中没有接口的概念,而是提供了“特质(trait) ”,它不仅实 现了接口的功能,还具备了很多其他的特性

  • Scala的特质,是代码重用的基本单元,可以同时拥有抽象方法和具体方法

  • Scala中,一个类只能继承自一个超类,却可以实现多个特质,从而重用特质中的方法和字段,实现了多重继承

特质的定义

  • 特质的定义和类的定义非常相似,有区别的是,特质定义使用关键字trait

trait CarId {
 var id:Int
 def currentId():Int
}
  • 上面定义了一个特质,里面包含一个抽象字段id和抽象方法currentId。注 意,抽象方法不需要使用abstract关键字,特质中没有方法体的方法,默 认就是抽象方法

把特质混入类中

  • 特质定义好以后,就可以使用extends或with关键字把特质混入类中

class BYDCarId extends CarId {
 override var id: Int = 10000
 override def currentId(): Int = {
   id += 1
   id
}
}

特质可以包含具体实现

  • 上面的实例中,特质只包含了抽象字段和抽象方法,相当于实现了类似Java 接口的功能。实际上,特质也可以包含具体实现,也就是说,特质中的字段 和方法不一定要是抽象的

trait CarId {
 var id:Int
 def currentId():Int
 def greeting(msg:String): Unit ={
   println(msg)
}
}

把多个特质混入类中

  • 上面已经定义了两个特质CarId和CarGreeting。可以把两个特质都混入到类中

trait CarId{
 var id:Int
 def currentId():Int
}
trait CarGreeting{
 def greeting(msg:String): Unit ={
   println(msg)
}
}
class BYDCarId extends CarId with CarGreeting {
 override var id: Int = 10000
 override def currentId(): Int = {
   id += 1
   id
}
}
object MyCar {
 def main(args: Array[String]): Unit = {
   val mycar = new BYDCarId()
   mycar.greeting("welcome my first car.")
   printf("My first CarId is %d.\n" , mycar.currentId())
}
}
// 执行结果
welcome my first car.
My first CarId is 10001.

Scala_特质

原文:https://www.cnblogs.com/zxbdboke/p/10466312.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!