scala学习trait

Scala里相当于Java接口的是Trait(特征)。Trait的英文意思是特质和性状),实际上他比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。Scala中特征被用于服务于单一目的功能模块的模块化中。通过混合这种特征(模块)群来实现各种应用程序的功能要求,Scala也是按照这个构想来设计的。

一般情况下Scala的类只能够继承单一父类,但是如果是特征的话就可以继承多个,从结果来看就是实现了多重继承。


trait Action{
def doAction
}
trait TBeforeAfter extends Action{
abstract override def doAction{
println("initialization")
super.doAction
println("Destory")
}
}
class Work extends Action{
override def doAction=println("working...")
}


class Human{
println("Human")
}
trait TTeacher extends Human{
println("TTeacher")
def teach
}
trait PianoPlayer extends Human{
println("PianoPlayer")
def playPiao={
println("I am playing piano.")
}
}


class PianoTeacher extends Human with TTeacher with PianoPlayer{
override def teach={
println("I am training students.")
}
}




object AopTest{
def main(args:Array[String]){


val work=new Work with TBeforeAfter
work.doAction
//initialization
//working...
//Destory


val t1=new PianoTeacher
t1.playPiao
t1.teach
//Human
//TTeacher
//PianoPlayer
//I am playing piano.
//I am training students.


val t2=new Human with TTeacher with PianoPlayer{
def teach={println("I am teaching students")}
}
t2.playPiao
t2.teach
//Human
//TTeacher
//PianoPlayer
//I am playing piano.
//I am teaching students.
}
}



class AbstractClassOps{
var id:Int=_
//val id:Int=_    //错误
}
abstract class SuperTeacher(val name:String){
var id:Int
var age:Int
def teach
}
class TeacherForMaths(name:String) extends SuperTeacher(name){
override var id=name.hashCode()
override var age=22
override def teach{
println("Teaching!!")
}
}
object AbstractClassOps{
def main(args:Array[String]){
val teacher=new TeacherForMaths("spark")
teacher.teach


println(teacher.id)
println(teacher.name)
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值