scala和java语言一样,采用了很强的限制策略,避免了多种继承的问题。在java语言中,只允许继承一个超类,该类可以实现多个接口,但java接口有其自身的局限性:接口中只能包括抽象方法,不能包含字段、具体方法。Scala语言利用Trait解决了该问题,在scala的trait中,它不但可以包括抽象方法还可以包含字段和具体方法。trait的示例如下:
生成的字节码文件反编译后的结果:
public interface cn.scala.xtwy.DAO {
public abstract boolean delete(java.lang.String);
public abstract boolean add(java.lang.Object);
public abstract int update(java.lang.Object);
public abstract scala.collection.immutable.List<java.lang.Object>query(java.lang.String);}
从反编译的结果中可以看出不包含字段和具体方法的traits使用Java interface来实现。
下面是带具体实现的traits代码
经过反编译后:
可以看出包含字段或者具体方法的traits使用Java abstract class来实现。
下面是类继承traits的演示:
当然类似于Java中的接口,如果有多个traits的话: