scala学习trait

原创 2016年06月01日 22:37:18

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)
}
}

scala学习(十五)——trait

scala学习(十五)——trait 下面是一个trait的简单例子,里面包含的trait的基本用法,trait的继承: trait Logger{ //这里在java的接口中只能声明为静态的...

Scala学习笔记5--Trait

Scala-Trait Trait Trait就像一个拥有部分实现的接口,可以通过with关键字混入导类中。 trait Friend { val name: String d...

scala学习笔记3(trait)

class UseTrait { } trait Logger{ def log(msg : String){ println("log: " + msg) } } class ...
  • lsshlsw
  • lsshlsw
  • 2014年08月31日 16:33
  • 523

Scala学习笔记12【继承、抽象类、trait实战】

Scala 继承代码示例:class Father(val name: String, val age: Int){ println("Father is here.") val school ...

Scala学习笔记13【trait之多重继承、AOP实战】

Scala多重继承Scala多重继承实战代码示例:class Human{ println("Human") }//定义teacher特性 trait TTeacher extends Human...

Scala入门到精通——第十一节 Trait进阶

本节主要内容 trait构造顺序 trait与类的比较 提前定义与懒加载 trait扩展类 self type 1 trait构造顺序在前一讲当中我们提到,对于不存在具体实现及字段的trait,它最终...

SCALA 集合框架文档翻译-Trait Traversable

Traversable 特质 SCALA集合类层级的顶端是 Traversable 特质。它只有一个抽象方法 foreach: def foreach[U](f: Elem => U) 实现 Tr...

Scala 之 trait 关键字

这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适。它的意义和java,c#中接口很类似。但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法。下面我们以一...

scala基础-----Trait Traversable

scala基础-----Trait Traversable

Scala trait介绍

Scala trait介绍及实践。
  • yyywyr
  • yyywyr
  • 2015年12月07日 22:40
  • 1007
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scala学习trait
举报原因:
原因补充:

(最多只允许输入30个字)