在scala中,trait相当于java中的interface关键字,可以用来定义接口,但是trait除了定义接口,还有许多强大功能
结果:Log: It's me !!!
结果: TraitLogger Log content is : It's me !!!
所以,一般在trait中做很多不同的 工具方法,然后根据运行情况混入不同的trait到对象中。
点击(此处)折叠或打开
- trait Logger{
- // def log (msg : String)
- def log (msg : String){} //与java不同的是,trait允许方法有实现
- }
-
- class ConcreteLogger extends Logger with Cloneable{ //with关键字可以用来使用其它trait
- override def log(msg : String) = println("Log: " + msg) //子类覆盖trait方法
- def concreteLog{
- log("It's me !!!")
- }
- }
-
- object UseTrait extends App{
- val logger = new ConcreteLogger
logger.concreteLog - }
点击(此处)折叠或打开
- trait Logger{
- def log (msg : String){}
- }
- class ConcreteLogger extends Logger with Cloneable{ //with关键字可以用来使用其它trait
- //这里没有覆盖trait的log方法
- def concreteLog{
- log("It's me !!!")
- }
- }
-
- trait TraitLogger extends Logger{ //定义另一个子trait,覆盖父trait的方法
- override def log (msg : String){
- println(" TraitLogger Log content is : " + msg)
- }
- }
-
- object UseTrait extends App{
- val logger = new ConcreteLogger whit TraitLogger //将具体实现的trait动态混入到对象中
- logger.concreteLog
- }
所以,一般在trait中做很多不同的 工具方法,然后根据运行情况混入不同的trait到对象中。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28912557/viewspace-1839844/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28912557/viewspace-1839844/