版权申明:转载请注明出处。
文章来源: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
链接:https://www.jianshu.com/p/99b08f98a63d
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦