Scala第十四天特质

packagecom.learn.scala.day14

/**

* 第十四天特质

* Created by zhuqing on 2017/3/13.

*/

objectDay14Class {

defmain(args: Array[String]): Unit = {

valsavingAccount =newSavingAccount(1000)

savingAccount.withdraw(2000)

/**

* 动态的增加特质

*/

valsavingAccount2 =newSavingAccount(200)withClassInfoLoggerwithShorterLogger {

/**

* 实现特质的方法

*@return

*/

override defclassInfo():String=this.getClass.toString

override vartimeFormat:String="yyyy-MM-dd hh:mm:ss"

}

savingAccount2.withdraw(100)

valaccount =newAccount(100)

account.saveMoeny(-1);

}

}

packagecom.learn.scala.day14

importjava.text.SimpleDateFormat

importjava.util.Date

/**

* 特质中只有一个默认的无参构造方法,不能自己实现构造方法

* 特质中的方法可以实现也可以不实现,类似Java的抽象类

*

* Created by zhuqing on 2017/3/13.

*/

traitLOG {

/**

* 日志输出,实现

*

*@param message

*/

deflog(message:String) = {

println(message)

}

}

/**

* Created by zhuqing on 2017/3/13.

*/

traitClassInfoLoggerextendsLOG {

/**

* 类信息,不实现

*

*@return

*/

defclassInfo():String

/**

* 日志输出,实现

*

*@param message

*/

override deflog(message:String): Unit =super.log(this.classInfo()+"\t"+message)

}

/**

* 继承其他特质可以使用 extends

*/

traitTimeStampLoggerextendsLOG {

/**

* 抽象参数,scala中的属性跟方法有时很像

*/

vartimeFormat:String

/**

* 特质重写特质的方法必须加override

*

*@param message

*/

override deflog(message:String): Unit = {

valdate =newDate();

valdateFormat =newSimpleDateFormat("yyyy-MM-dd hh:mm:ss")

super.log(dateFormat.format(date) +"\t"+ message)

}

}

/**

* 特质里可以定义属性,类似java的抽象类

*/

traitShorterLoggerextendsLOG{

/**

* 属性也可以定义成抽象参数

*/

varmaxLength=15;

protected defsetMaxLength(maxLength:Int): Unit ={

this.maxLength= maxLength

}

/**

* 重写日志输出

*

*@param message

*/

override deflog(message:String): Unit = {

if(message.length >5) {

super.log(message.substring(0,5) +"...")

}else{

super.log(message)

}

}

}

packagecom.learn.scala.day14

importscala.beans.BeanProperty

/**

* 特质的方法不会先后覆盖,而是从后往前一个一个执行的

* Created by zhuqing on 2017/3/13.

*/

classAccount(@BeanPropertyvarbalance:Double)extendsTimeStampLoggerwithClassInfoLoggerwithShorterLogger{

/**

* 类信息,不实现

*

*@return

*/

override defclassInfo():String=this.getClass.toString

defsaveMoeny(money:Double): Unit ={

if(money<=0){

log("非法操作,不能存入"+money+"元")

}else{

balance+=money

log("成功存入"+money+"元,余额"+balance+"元")

}

}

/**

* 重写Trit的属性

*/

override varmaxLength=20;

/**

* trit的抽象属性

*/

override vartimeFormat:String="yyyy-MM-dd hh:mm:ss"

}

/**

* Created by zhuqing on 2017/3/13.

*/

classSavingAccount (@BeanPropertyvarbalance:Double)extendsTimeStampLogger{

defwithdraw(money:Double): Unit ={

if(money>balance){

this.log("余额不足!!")

}else{

balance -=money;

this.log("取款"+money+",取款成功")

}

}

override vartimeFormat:String="yyyy-MM-dd hh:mm:ss"

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,081评论 19 139
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,321评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,182评论 0 6
  • 一个人在独居时想要保持自律很难,我周围很多人独居的时候基本宅在家,没有正常的社交活动,公司,宿舍就是他的一天。一觉...
    晓越明阅读 1,867评论 0 4
  • 9月8日全市召开农村贫困人口建档立卡“回头看”调度会后,路南区委区政府高度重视,会后区委常委、副区长刘继...
    e3291ce57f71阅读 174评论 0 0

友情链接更多精彩内容