zoukankan      html  css  js  c++  java
  • 12-5 作为可叠加修改的特质

    定义一个抽象的IntQueue类

    abstract class IntQueue {
      def get(): Int
      def put(x: Int)
    }
    

    IntQueue的基本实现BasicIntQueue

    class BasicIntQueue extends IntQueue {
      private val buf = new ArrayBuffer[Int]
    
      override def get(): Int = buf.remove(0)
    
      override def put(x: Int): Unit = buf += x
    }
    

    特质Doubling:将所有放入队列的整数翻倍

    ①extends IntQueue 这个声明意味着这个特质只能被混入同样继承自IntQueue的类。

    ②super 由于特质中的super调用是动态绑定的,只要在给出了该方法具体定义的特质或类之后混入,Doubling特质里的super调用就可以正常工作。

    ③abstract override 这样的修饰符组合只允许用在特质的成员上,不允许用在类的成员上,它的含义是该特质必须混入某个拥有该方法具体定义的类中。

    trait Doubling extends IntQueue{
      abstract override def put(x: Int): Unit = super.put(2 * x)
    }
    

    特质Incrementing:将所有放入队列的整数加一

    trait Incrementing extends IntQueue {
      abstract override def put(x: Int): Unit = super.put(x + 1)
    }
    

    特质Filtering:从队列中去除负整数

    trait Filtering extends IntQueue {
      abstract override def put(x: Int): Unit = if (x >=0) super.put(x)
    }
    

    测试1:粗略地讲,越靠右出现的特质越先起作用,如果那个方法调用super,它将调用左侧紧挨着它的那个特质的方法,以此类推。在下面的代码中,先调用Filtering的put最先被调用,所以它首先过滤掉了那些负的整数。Incrementing的put排在第二,因此它做的事情就是在Filtering的基础上对剩下的整数加1

    def main(args: Array[String]): Unit = {
      val queue = new BasicIntQueue with Incrementing with Filtering
      queue.put(-1)
      queue.put(0)
      queue.put(1)
      println(queue.get()) //1
      println(queue.get()) //2
    }
    

    测试2:与测试1的特质混入顺序相反

    def main(args: Array[String]): Unit = {
      val queue = new BasicIntQueue with Filtering with Incrementing
      queue.put(-1)
      queue.put(0)
      queue.put(1)
      println(queue.get()) //0
      println(queue.get()) //1
      println(queue.get()) //2
    }
    
  • 相关阅读:
    Android集成科大讯飞SDK语音听写及语音合成功能实现
    Android开发中一些常见的问题解决方案
    Android混淆配置文件规范
    android第三方分享之友盟社会化组件
    android一些常用的代码2(收藏)
    svn
    ubuntu 解决中文zip乱码问题
    android优秀Github源码整理
    linux清理内存
    cocos2d-x图层相关 锚点
  • 原文地址:https://www.cnblogs.com/noyouth/p/14092247.html
Copyright © 2011-2022 走看看