trait Log {

  def log(message:String) = println("log:" + message)

}

/**
* 为实例混入trait
*
*/ trait Logs{
def log(message:String){}
} trait MyLog extends Logs {
override def log(message: String): Unit = {
println("log:" + message)
}
} class MixTraitUse(val name:String) extends Logs { def sayHello{
println("hello " + name)
log("sayHello method invoked!!")
} } object MixTraitUseTest{ def main(args: Array[String]): Unit = {
val mix1 = new MixTraitUse("yxj")
mix1.sayHello val mix2 = new MixTraitUse("yyy") with MyLog
mix2.sayHello
}

  

trait Handler {

  def handler(data: String) {}

}

trait DataValidTrait extends Handler {

  override def handler(data: String): Unit = {
println("this is DataValidTrait handler invoked.")
super.handler(data)
} } trait SignatureTrait extends Handler { override def handler(data: String): Unit = {
println("this is SignatureTrait handler invoked.")
super.handler(data)
} } class ChainPerson(name: String) extends SignatureTrait with DataValidTrait { def sayHello(data: String) {
println("sayHello from " + name)
handler(data)
}
} object TraitChainUse { def main(args: Array[String]): Unit = {
val p1 = new ChainPerson("yxj")
p1.sayHello("chanin data") } }

  

trait Loger {
println("loger constructor ..")
} trait MyLoger extends Loger{
println("MyLoger constructor...")
} trait TimeLoger extends Loger{
println("TimeLogers constructor...")
} class TraitConstructor {
println("trait constructor")
} class SubTrait extends TraitConstructor with MyLog with TimeLoger { println("subtrait contructor...") } object tcT{ def main(args: Array[String]): Unit = {
val sub = new SubTrait }
}

  

class People(val name:String) extends Log {

  def makeFriends(p:People) ={
println("hello, " + p.name + " i'm " + name + ",i want to make friends with you ")
log("makeFriends method invoked with parameter " + p.name)
} } object TraitLoggerUse{ def main(args: Array[String]): Unit = {
val s1 = new People("yxj")
val s2 = new People("wulanlan") s1.makeFriends(s2) } }

  

trait HelloTrait{
def sayHello(name:String)
} /**
* trait 中定义的field,继承的类,可以直接获取到使用
*
*/
trait MakeTrait{
val eyeNum:Int = 2
def makeFriends(p:Person)
} class Person(val name:String) extends HelloTrait with MakeTrait { def sayHello(otherName:String) = {
println("hello " +otherName + ", im " + name + ", i have " + eyeNum + " eyes.")
} def makeFriends(p: Person): Unit = {
println("hello " + p.name + ",i'm " + name + ",i want to make friends with you.")
} } object useTrait{ def main(args: Array[String]): Unit = { val p1 = new Person("yxj")
val p2 = new Person("wulanlan") p1.sayHello("yy") p2.sayHello("zz") p1.makeFriends(p2) } }

  

scala中Trait简单使用的更多相关文章

  1. scala中Array简单实用

    /** * 在scala中数组的使用 * 和java很类似,初始化后,长度就固定了,而且元素全部根据其类型初始化 * */ object arrayUse { def main(args: Array ...

  2. 【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型

    一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case ...

  3. scala中Tuple简单使用

    /** * Tuple简单使用记录 * 最大22个参数 */ object TupleUse { def main(args: Array[String]): Unit = { // 简单Tuple ...

  4. scala中ArrayBuffer简单使用

    import scala.collection.mutable.ArrayBuffer /** * 与Array区别: * 1.Array是不可变的,不能直接地对其元素进行删除操作,只能通过重赋值或过 ...

  5. scala中函数简单使用记录

    object funcHighLevel { def main(args: Array[String]): Unit = { // 创建一个匿名函数 val sayFunc = (name: Stri ...

  6. Scala 中 object、class 与 trait 的区别

    Scala 中 object.class 与 trait 的区别 引言 当你刚入门 Scala,肯定会迫不及待想要编写自己的第一个 Scala 程序.如果你已经在交互模式下敲过 Scala 代码,想必 ...

  7. 第2节 Scala中面向对象编程:12、13、14、15、16、trait

    6.4.  Scala中面向对象编程之trait 6.4.1.    将trait作为接口使用 Scala中的trait是一种特殊的概念: 首先先将trait作为接口使用,此时的trait就与Java ...

  8. Scala中的语言特性是如何实现的(3) -- Trait

    我的新博客地址:http://cuipengfei.me/blog/2013/10/13/scala-trait/ 我在Coursera上跟了一门叫做Functional Programming Pr ...

  9. scala中的trait

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

随机推荐

  1. Linux设置以root用户开机自动登录桌面

    目录 Ubuntu 18.04系统下设置 Redhat7.6系统下设置 Ubuntu 18.04系统下设置 1. 允许使用root用户登录桌面    Ubuntu默认不允许使用root用户登录桌面的, ...

  2. 让APK只包含指定的ABI(转)

    转自:http://blog.csdn.net/justfwd/article/details/49308199 现在很多android第三方 sdk是以aar形式提供的,甚至是远程aar,如果这个s ...

  3. 1、Spring MVC的web.xml配置详解(转)

    版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u010796790 1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilt ...

  4. es5-class

    1. 通过class定义类/实现类的继承2. 在类中通过constructor定义构造方法3. 通过new来创建类的实例4. 通过extends来实现类的继承5. 通过super调用父类的构造方法6. ...

  5. PHP实现上传视频的功能

    首先前台HTML表单代码如下: <html> <head> <meta http-equiv="Content-Type" content=" ...

  6. flex: 1在ios10.2系统手机端的换行布局失败问题

    使用flex:1要追加flex-basis: auto;可以简写flex: 1 1 auto; 表格不可以用flex布局

  7. Shiro学习(18)并发人数限制

    在某些项目中可能会遇到如每个账户同时只能有一个人登录或几个人同时登录,如果同时有多人登录:要么不让后者登录:要么踢出前者登录(强制退出).比如spring security就直接提供了相应的功能:Sh ...

  8. Linux命令篇-服务器查看日志(续)

    此文是继上文如何在服务器看日志的续集.之所以我觉得自己很菜,是因为我的周围都是大佬,他们都是值得我学习的对象. 通常大家看日志,无非两种,一是more命令,一是tail命令,其中的过程要么是翻页查看, ...

  9. P1537 弹珠

    P1537 弹珠 题目描述 玛莎和比尔各自有自己的弹珠收藏.他们想重新分配收藏品,使两人能平等拥有弹珠.如果所有的弹珠的价值相同,那么他们就可以平分.但不幸的是,有一些弹珠更大,或者更美丽,所以,玛莎 ...

  10. vue2.0使用基础

    开发情况下需要引入vue.js和vue-resource.js,el:dom生效范围,data,dom静态数据,mounted:初始化调用方法,注意,官方文档需要添加this.$nextTict(fu ...