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进阶

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

Scala Trait详解

除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码。 对于Java程序员来说理解traits的最好方法就是把他们当作可以包含代码的接口(interface)。在Scala...
  • lipc_
  • lipc_
  • 2016-07-16 11:24:17
  • 1622

Scala:trait

Scala中对trait的处理
  • bdmh
  • bdmh
  • 2015-12-14 14:00:34
  • 2023

scala学习之:scala的self Types与依赖注入的代码实战

self Type 自身类型 有两种表现形式: 第一种:self 为自身类型 this的别名 class self{   self =>    //  self 为自身类型 this的别名...
  • mzygssk
  • mzygssk
  • 2015-08-26 21:36:26
  • 454

Scala trait介绍

Scala trait介绍及实践。
  • yyywyr
  • yyywyr
  • 2015-12-07 22:40:06
  • 1125

Scala之trait

1. 将trait作为接口使用 Scala中的Triat是一种特殊的概念,首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似。 在triat中可以定义抽象方法,就...
  • echo_ale
  • echo_ale
  • 2017-05-15 20:36:27
  • 497

Scala Trait 详解(实例)

Trait基础 在Scala中,Trait是一种特殊概念。首先,Trait可以被作为接口来使用,此时Trait与Java的接口非常类似。同时在Trait可以定义抽象方法,其与抽象类中的抽象方法一样,不...
  • Godfrey1
  • Godfrey1
  • 2017-04-21 16:29:04
  • 2260

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

Scala多重继承Scala多重继承实战代码示例:class Human{ println("Human") }//定义teacher特性 trait TTeacher extends Human...
  • y396397735
  • y396397735
  • 2015-10-10 11:15:43
  • 523

scala入门-07特质类(trait)的使用

scala入门-07特质类(trait)的使用 scala入门-07特质类(trait)的使用 scala入门-07特质类(trait)的使用...
  • stark_summer
  • stark_summer
  • 2015-01-12 18:45:59
  • 16381

sealed trait Scala学习笔记-面向对象篇

被sealed 声明的 trait仅能被同一文件的的类继承。 除了这个,我们通常将sealed用于枚举中,因为编译器在编译的时候知道这个trait被哪些类继承过,因此我们在match时对sealed...
  • wzq294328238
  • wzq294328238
  • 2015-05-24 21:00:52
  • 1920
收藏助手
不良信息举报
您举报文章:scala学习trait
举报原因:
原因补充:

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