scala中的特质

版权申明:转载请注明出处。
文章来源:玄涧思库

总体来说,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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇