您的位置:首页 > 其它

Scala第十四天特质

2017-03-16 00:00 127 查看
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.day14

import java.text.SimpleDateFormat
import 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.day14

import 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"
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Scala