Scala学习之延迟绑定

 1 package com.swust.example
 2
 3 object TraitDemo2 extends App{
 4
 5    //抽象类
 6      abstract class Writer {
 7         def writeMessage(message: String)
 8      }
 9      /**
10       * 继承这个抽象类,并且用super调用了这个抽象方法
11       * scala要求将方法声明为abstract override
12       * override告诉scala要为基类的一个已知方法提供一个实现
13       * abstract表示这个方法实际最后的终极实现要由混入这个trait的类提供
14       */
15      trait UpperCaseWriter extends Writer{
16         abstract override def writeMessage(message: String)={
17            super.writeMessage(message.toUpperCase)
18         }
19      }
20      /**
21       * 为了调用super.writeMessage,scala做了两件事情
22       * 1、对这个调用进行了延迟绑定
23       * 2、要求混入这些trait的类提供该方法的实现
24       */
25      trait WordFilterWriter extends Writer{
26         abstract override def writeMessage(message: String)={
27            super.writeMessage(message.replace("stupid","s-----"))
28         }
29      }
30      class StringWriterDelegate extends Writer{
31         val writer = new java.io.StringWriter
32         //实现抽象类的方法,不用override
33         def writeMessage(message: String) = writer.write(message)
34         override def toString(): String = writer.toString
35      }
36      //创建实例时混入trait
37      val first = new StringWriterDelegate with UpperCaseWriter with WordFilterWriter
38      val last = new StringWriterDelegate with WordFilterWriter with UpperCaseWriter
39      first.writeMessage("there is no sin except stupidity")
40      last.writeMessage("there is no sin except stupidity")
41      println(first)
42      println(last)
43
44 }
时间: 2024-12-28 00:23:34

Scala学习之延迟绑定的相关文章

scala学习手记34 - trait方法的延迟绑定

trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer { def write(message: String): String } trait UpperWriter extends Writer { abstract override def write(message: String): String = super.write(message.toUpperCase) }

数据持久化、单例、重载【添加对不可访问的成员的操作】、魔术方法、类常量、static关键字对self的补充【静态延迟绑定实现$this的效果】、参数类型约束【参数前加类名】、遍历【iterator接口】、快速排序

1.数据持久化过程[传输(例如表单提交或php交互mysql)和保存过程] 使用的是字符串形式的流数据. 数据流就是为了传输[按照序列的形式进行传输] [http://baike.baidu.com/link?url=0MtUQMhFzc_EwJc09rXZV8KlfOL4jis6XNbRfmGA3rQhDcGwOp8togLVQjXBV34M] 所以将其他类型数据转化为字符串的过程也是序列化的过程 [这个概念和图片.视频的流媒体的区别?] [注意点] 另外mysql中sql语句中的某些关键词为

PHP OPP 和模式 (2) - 静态变量、属性和方法及延迟绑定

PHP高级程序设计 学习笔记 2014.06.10 本文讨论static关键字,他可以用在变量.类和方法上. 1.静态变量 静态变量是只存在于函数作用域的变量,不过,在函数执行完成以后,这种变量的值不会丢失,也就是说,在下一次执行这个函数时,变量仍然会记得原来的值.要将某个变量定义为静态的,只需要在变量前加上static关键字即可. function testing() { static $a = 1; $a *= 2; echo $a."\n"; } testing(); testi

Scala学习笔记及与Java不同之处总结-从Java开发者角度

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

Scala学习笔记-环境搭建以及简单语法

关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first import scala.collection.mutable.ListBuffer object A { def main(args: Array[String]) { print("Hello,Scala");//学习程序设计的第一句 println("---");//pr

PHP 延迟绑定

1 class product{ 2 public static function create(){ 3 return new static(); 4 } 5 } 6 7 class food extends product{ 8 9 } 10 11 var_dump(food::create()); 12 //food::out(); 以上代码输出:object(food)#1 (0) { } class product{ public static function create(){ r

jQuery学习-事件之绑定事件(三)

在上一篇<jQuery学习-事件之绑定事件(二)>我们了解了jQuery的dispatch方法,今天我们来学习下handlers 方法: handlers: function( event, handlers ) {         var sel, handleObj, matches, i,             handlerQueue = [],             delegateCount = handlers.delegateCount,             cur =

Spark之Scala学习

1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.thinksaas.cn/group/topic/93852/ 3. Spark之Scala学习网站 http://spark.apache.org/docs/latest/mllib-decision-tree.html 4. Spark wordcount开发并提交到集群运行: http://ww

scala学习(一)

开始学习scala,有一种学习java的感觉. 首先,从网站下载scala的包,下载后要安装,安装后把安装目录的bin放到环境变量psth里 cmd里,输入scala,如果出现下图,那么恭喜咯,安装成功咯~~ 1:变量 首先我们看下定义变量方法 var 可以定义变量,可以改变值 val 定义的变量不可以改变值,类似于java的final变量: 2:函数 如图定义了一个函数 def max(x:Int,y:Int):Int ={ if(x>y)x else y } def:表面定义函数 max :