本文共 1439 字,大约阅读时间需要 4 分钟。
1、java中有interface接口,scala里有同样功能的关键字trait,trait的功能比interface功能强大很多。
2、trait和Java中的有所不同 interface中只能定义abstarct public方法 而trait中可以定义具体实现方法class UserTrait { } trait Logger{ def log(msg: String) //在trait中定义抽象方法 def logImpl(msg: String){} //在trait中定义具体方法 } /** * 类可以继承多个trait 语法为:extend trait with trait1 */ class ConcreteLogger extends Logger with Cloneable{ override def log(msg: String) = println("Log:"+msg) //复写Logger trait中log抽象方法 def concreteLogger{ log("It's me") } } /** * 在使用对象混入trait使用的前提是 * 该TraitLogger要继承复写方法的那个trait */ trait TraitLogger extends Logger{ override def log(msg: String){ println("TraitLogger log content is :" + msg) } } trait TraitLoggered{ def logged(msg: String){ println("TraitLoggered log content is :" + msg) } } /** * Scala中作为接口的trait、在对象中混入trait */ object InterfaceOps { def main(args: Array[String]): Unit = { val concreteLogger = new ConcreteLogger concreteLogger.concreteLogger //row result : Log:It's me val concreteLogger1 = new ConcreteLogger with TraitLogger //在实例化时混入trait 则会调用TraitLogger中的log concreteLogger1.concreteLogger //row result : TraitLogger log content is :It's me } }
scala和java一样只能继承一个类或抽象类,但可以实现多个接口,scala可以在对象中混入多个trait代码,把各种各样工具方法混入类和对象中,这给我们构造大型工厂和复杂一些的上下文环境十分重要。
转载地址:http://brrub.baihongyu.com/