1. trait Log {
  2.  
  3. def log(message:String) = println("log:" + message)
  4.  
  5. }
  6.  
  7. /**
  8. * 为实例混入trait
  9. *
  10. */
  11.  
  12. trait Logs{
  13. def log(message:String){}
  14. }
  15.  
  16. trait MyLog extends Logs {
  17. override def log(message: String): Unit = {
  18. println("log:" + message)
  19. }
  20. }
  21.  
  22. class MixTraitUse(val name:String) extends Logs {
  23.  
  24. def sayHello{
  25. println("hello " + name)
  26. log("sayHello method invoked!!")
  27. }
  28.  
  29. }
  30.  
  31. object MixTraitUseTest{
  32.  
  33. def main(args: Array[String]): Unit = {
  34. val mix1 = new MixTraitUse("yxj")
  35. mix1.sayHello
  36.  
  37. val mix2 = new MixTraitUse("yyy") with MyLog
  38. mix2.sayHello
  39. }

  

  1. trait Handler {
  2.  
  3. def handler(data: String) {}
  4.  
  5. }
  6.  
  7. trait DataValidTrait extends Handler {
  8.  
  9. override def handler(data: String): Unit = {
  10. println("this is DataValidTrait handler invoked.")
  11. super.handler(data)
  12. }
  13.  
  14. }
  15.  
  16. trait SignatureTrait extends Handler {
  17.  
  18. override def handler(data: String): Unit = {
  19. println("this is SignatureTrait handler invoked.")
  20. super.handler(data)
  21. }
  22.  
  23. }
  24.  
  25. class ChainPerson(name: String) extends SignatureTrait with DataValidTrait {
  26.  
  27. def sayHello(data: String) {
  28. println("sayHello from " + name)
  29. handler(data)
  30. }
  31. }
  32.  
  33. object TraitChainUse {
  34.  
  35. def main(args: Array[String]): Unit = {
  36. val p1 = new ChainPerson("yxj")
  37. p1.sayHello("chanin data")
  38.  
  39. }
  40.  
  41. }

  

  1. trait Loger {
  2. println("loger constructor ..")
  3. }
  4.  
  5. trait MyLoger extends Loger{
  6. println("MyLoger constructor...")
  7. }
  8.  
  9. trait TimeLoger extends Loger{
  10. println("TimeLogers constructor...")
  11. }
  12.  
  13. class TraitConstructor {
  14. println("trait constructor")
  15. }
  16.  
  17. class SubTrait extends TraitConstructor with MyLog with TimeLoger {
  18.  
  19. println("subtrait contructor...")
  20.  
  21. }
  22.  
  23. object tcT{
  24.  
  25. def main(args: Array[String]): Unit = {
  26. val sub = new SubTrait
  27.  
  28. }
  29. }

  

  1. class People(val name:String) extends Log {
  2.  
  3. def makeFriends(p:People) ={
  4. println("hello, " + p.name + " i'm " + name + ",i want to make friends with you ")
  5. log("makeFriends method invoked with parameter " + p.name)
  6. }
  7.  
  8. }
  9.  
  10. object TraitLoggerUse{
  11.  
  12. def main(args: Array[String]): Unit = {
  13. val s1 = new People("yxj")
  14. val s2 = new People("wulanlan")
  15.  
  16. s1.makeFriends(s2)
  17.  
  18. }
  19.  
  20. }

  

  1. trait HelloTrait{
  2. def sayHello(name:String)
  3. }
  4.  
  5. /**
  6. * trait 中定义的field,继承的类,可以直接获取到使用
  7. *
  8. */
  9. trait MakeTrait{
  10. val eyeNum:Int = 2
  11. def makeFriends(p:Person)
  12. }
  13.  
  14. class Person(val name:String) extends HelloTrait with MakeTrait {
  15.  
  16. def sayHello(otherName:String) = {
  17. println("hello " +otherName + ", im " + name + ", i have " + eyeNum + " eyes.")
  18. }
  19.  
  20. def makeFriends(p: Person): Unit = {
  21. println("hello " + p.name + ",i'm " + name + ",i want to make friends with you.")
  22. }
  23.  
  24. }
  25.  
  26. object useTrait{
  27.  
  28. def main(args: Array[String]): Unit = {
  29.  
  30. val p1 = new Person("yxj")
  31. val p2 = new Person("wulanlan")
  32.  
  33. p1.sayHello("yy")
  34.  
  35. p2.sayHello("zz")
  36.  
  37. p1.makeFriends(p2)
  38.  
  39. }
  40.  
  41. }

  

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. Manjaro配置中国源

    1.自动寻找中国源 sudo pacman-mirrors -i -c China -m rank//更新镜像排名sudo vim /etc/pacman.d/mirrorlist //查看选择的源s ...

  2. celery使用的小记录

    一篇还不错的入门说明: http://www.bjhee.com/celery.html, 官方文档: http://docs.jinkan.org/docs/celery/getting-start ...

  3. CodeForces - 337D 树形dp

    题意:一颗树上有且仅有一只恶魔,恶魔会污染距离它小于等于d的点,现在已经知道被污染的m个点,问恶魔在的可能结点的数量. 容易想到,要是一个点到(距离最远的两个点)的距离都小于等于d,那么这个点就有可能 ...

  4. 笔记62 Spring Boot快速入门(二)

    SpringBoot部署 一.jar方式 1.首先安装maven. <1>下载最新的maven版本:https://maven.apache.org/download.cgi <2& ...

  5. linux配置java环境变量(详细)(转)

    linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586. ...

  6. Eclipse编辑Spring配置文件xml时自动提示类class包名

    第一步,先查看下自己的Eclipse是什么版本,步骤如下: 1.1 点击Eclipse菜单‘Help  -> About Eclipse’,如下图: 1.2 点击Eclipse图标如下,看清楚哦 ...

  7. 安装配置oh-my-zsh

    1.下载安装iterm:https://www.iterm2.com/ 2.安装zsh 查看系统当前使用的shell $ echo $SHELL /bin/bash 查看系统是否安装了zsh $ ca ...

  8. oracle查询重复数据出现次数

    话不多数上代码: 我在Oracle数据库查数据,发现重复数据,于是我想把重复条数以及具体数据查出来: 下面是数据 然后我需要知道重复多少条 (重复十条,也就是有五条数据相同) SQL: select ...

  9. java 获取的是本地的IP地址

    1 public static void main(String[] args) { 2 try { 3 InetAddress address = InetAddress.getLocalHost( ...

  10. sql 数据库

    在关系数据库中,最常用的操作就是查询.直线电机推杆 准备数据 为了便于讲解和练习,我们先准备好了一个students表和一个classes表,它们的结构和数据如下: students表存储了学生信息: ...