博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala第十四天特质
阅读量:7297 次
发布时间:2019-06-30

本文共 2982 字,大约阅读时间需要 9 分钟。

hot3.png

package com.learn.scala.day14/**  * 第十四天特质  * Created by zhuqing on 2017/3/13.  */object Day14Class {  def main(args: Array[String]): Unit = {    val savingAccount = new SavingAccount(1000)    savingAccount.withdraw(2000)    /**      * 动态的增加特质      */    val savingAccount2 = new SavingAccount(200) with ClassInfoLogger with ShorterLogger {      /**        * 实现特质的方法        * @return        */      override def classInfo(): String = this.getClass.toString    }    savingAccount2.withdraw(100)    val account = new Account(100)    account.saveMoeny(-1);  }}
package com.learn.scala.day14import java.text.SimpleDateFormatimport java.util.Date/**  * 特质中只有一个默认的无参构造方法,不能自己实现构造方法  * 特质中的方法可以实现也可以不实现,类似Java的抽象类  *  * Created by zhuqing on 2017/3/13.  */trait LOG {  /**    * 日志输出,实现    *    * @param message    */  def log(message: String) = {    println(message)  }}/**  * Created by zhuqing on 2017/3/13.  */trait ClassInfoLogger extends LOG {  /**    * 类信息,不实现    *    * @return    */  def classInfo(): String  /**    * 日志输出,实现    *    * @param message    */  override def log(message: String): Unit = super.log(this.classInfo()+"\t"+message)}/**  * 继承其他特质可以使用 extends  */trait TimeStampLogger extends LOG {  /**    * 抽象参数,scala中的属性跟方法有时很像    */  var timeFormat:String  /**    * 特质重写特质的方法必须加override    *    * @param message    */  override def log(message: String): Unit = {    val date = new Date();    val dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")    super.log(dateFormat.format(date) + "\t" + message)  }}/**  * 特质里可以定义属性,类似java的抽象类  */trait ShorterLogger extends LOG{  /**    * 属性也可以定义成抽象参数    */  var maxLength = 15;  protected def setMaxLength(maxLength:Int): Unit ={    this.maxLength = maxLength  }  /**    * 重写日志输出    *    * @param message    */  override def log(message: String): Unit = {    if (message.length > 5) {      super.log(message.substring(0, 5) + "...")    } else {      super.log(message)    }  }}

 

package com.learn.scala.day14import scala.beans.BeanProperty/**  * 特质的方法不会先后覆盖,而是从后往前一个一个执行的  * Created by zhuqing on 2017/3/13.  */class Account(@BeanProperty var balance:Double) extends TimeStampLogger with ClassInfoLogger with ShorterLogger{  /**    * 类信息,不实现    *    * @return    */  override def classInfo(): String = this.getClass.toString  def saveMoeny(money:Double): Unit ={     if(money<=0){        log("非法操作,不能存入"+money+"元")     }else{       balance+=money       log("成功存入"+money+"元,余额"+balance+"元")     }  }  /**    * 重写Trit的属性    */  override var  maxLength = 20;  /**    * trit的抽象属性    */  override var timeFormat: String = "yyyy-MM-dd hh:mm:ss"}/**  * Created by zhuqing on 2017/3/13.  */class SavingAccount (@BeanProperty var balance:Double) extends TimeStampLogger{  def withdraw(money:Double): Unit ={    if(money>balance){      this.log("余额不足!!")    }else{      balance -=money;      this.log("取款"+money+",取款成功")    }  }  override var timeFormat: String = "yyyy-MM-dd hh:mm:ss"}

 

转载于:https://my.oschina.net/u/587323/blog/860944

你可能感兴趣的文章
xml相关
查看>>
如何将App从一个账号迁移到另一个账号?
查看>>
linux系统修改字符集
查看>>
phantomjs-截图比例
查看>>
javascript for of
查看>>
EF6 秘籍 2th:实体数据建模基础 (十二)使用条件过滤对象集合
查看>>
30天了解30种技术系列---(1)现代web应用服务器-Express.js
查看>>
某android平板项目开发笔记----aChartEngine图表显示(2)
查看>>
マクロ使用基準
查看>>
将博客搬至CSDN
查看>>
如何mac下安装virtual,并识别usb接口
查看>>
Ansible批量部署zabbix-agent
查看>>
使用PowerShell对比两个服务器系统进程和软件清单
查看>>
线程池的概述和使用学习笔记
查看>>
oracle基础之日志系列
查看>>
【NetApp】移动磁盘柜到一个新的控制器
查看>>
实在太伟大了,感谢楼主共享深度爬取和广度爬取
查看>>
crontab调用python时出现ImportError: No module named XXX的问题
查看>>
方正智睿NoSQL数据库总体介绍
查看>>
CentOS6.9安装Redis4.0.0
查看>>