zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    144环形链表
    83. 删除排序链表中的重复元素
    21合并两个有序链表
    PyCharm2020激活破解教程
    Python正课目录
    2条pip命令解决Python项目依赖的导出和导出
    pip离线安装模块
    Python正课149 —— luffy项目 User表的配置
    Python正课148 —— luffy项目 数据库配置
    解决:django中LookupError No installed app with label 'admin'
  • 原文地址:https://www.cnblogs.com/sunfie/p/5077262.html
Copyright © 2011-2022 走看看