8.scala:特质

作者: bigdataer | 来源:发表于2017-05-02 15:21 被阅读85次

版权申明:转载请注明出处。
文章来源:http://bigdataer.net/?p=317

总体来说,scala中的特质类似于Java中的接口,但是有别于接口的是特质中既可以有实现方法也可以有抽象方法。

1.特质的定义

使用关键字trait来定义一个特质,如:

trait Log{
 def info(msg:String)
 def debug(msg:String){print(msg)}
}

2.特质的使用

通过关键字extends来使用特质,这样,使用了特质的这个类就混入了特质的实现方法和抽象方法。其中,实现方法可以直接使用,抽象方法可以在类中实现,需要注意的是重写这些方法不需要使用注解override。如:

class Cat extends Log{
 //实现抽象方法
 def info(msg:String){print("I am a cat")}
 //直接使用已实现的方法
 debug("I am running")
}

3.特质的叠加

可以为一个类添加多个特质,使用关键字with连接。如果添加的多个特质里面有相同的方法,可以使用super[T].method()来指定使用哪个特质里面的方法。如下:

class Cat extends Log with Play{
}

加入Log和Play中都有一个方法error(),需要指定调用Log里面的error时可以这样写super[Log].error()

4.特质重写特质的抽象方法

前面提到类重写特质的抽象方法不需要加override,但是假如有一个特质ConsleLog需要重写特质Log的抽象方法log,则需要添加override和abstract,scala认为这样重写后的方法也是抽象的。如:

trait ConsleLog extends Log{
 abstract override def log(msg:String){
  super.log("consle:"+msg)
 }
}

5.特质扩展类

特质可以扩展特质,在scala中特质可以扩展类,有点不可思议,但确实可以。如特质LogException扩展了Exception类。若Account这个类使用了特质LogException,则Exception会自动成为Account的超类,可以使用Exception中可用的方法。

更多文章请关注微信公众号:bigdataer

相关文章

  • 8.scala:特质

    版权申明:转载请注明出处。文章来源:http://bigdataer.net/?p=317 总体来说,scala中...

  • 双性化

    双性化,是个有趣的话题,它指同时具备男性特质和女性特质。那什么是男性特质、女性特质呢? 男性特质:也叫工具性特质,...

  • Scala学习笔记 A2/L1篇 - 特质Traits

    教材:快学Scala chapter 10. 特质 Traits Scala特质与Java接口不同,Scala特质...

  • scala学习 - 特质

    本文来自《Programming in Scala》一书 Scala学习之特质(trait) 1 特质的定义 特质...

  • 特质

    今天看到一个领导发的一篇文章,主要是说,如果人员不匹配,何必去培养一个不符合的人?直接招聘一个新人就行了,对的,我...

  • 特质

    我问朋友,说:“我是什么类型的阿?“说不出来。”我又想了想,她又是什么样的呢?特别之处是喜欢尝试不一样的东西,没遇...

  • 特质

    里里是轻松流畅欢乐;画画是画得像的技能;建筑手绘是家的温暖和安全;箫是沉韵;日语英语韩语是交谈自信大方开朗;摄影外...

  • 特质

    不大主动去联系人。由于是个慢热的人,表面看起来朋友很多,但真正挂念和在乎的或许只有那几个人而已。也就是说,大部分的...

  • 特质

    出现在你生命中的每个人每件事,都带着独一无二的特质。降临那一刻,普通却又不寻常

  • 特质

    有人问我说,什么样的男孩子会讨女孩子喜欢,我回答,是优秀。 有人说,女孩子喜欢坏坏的男孩子,因为男人不坏,女人不爱...

网友评论

    本文标题: 8.scala:特质

    本文链接:https://www.haomeiwen.com/subject/ofgctxtx.html