scala和java語(yǔ)言一樣界弧,采用了很強(qiáng)的限制策略凡蜻,避免了多種繼承的問題搭综。在java語(yǔ)言中,只允許繼承一個(gè)超類划栓,該類可以實(shí)現(xiàn)多個(gè)接口兑巾,但java接口有其自身的局限性:接口中只能包括抽象方法,不能包含字段忠荞、具體方法蒋歌。Scala語(yǔ)言利用Trait解決了該問題,在scala的trait中委煤,它不但可以包括抽象方法還可以包含字段和具體方法堂油。trait的示例如下:
生成的字節(jié)碼文件反編譯后的結(jié)果:
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);}
從反編譯的結(jié)果中可以看出不包含字段和具體方法的traits使用Java interface來(lái)實(shí)現(xiàn)。
下面是帶具體實(shí)現(xiàn)的traits代碼
經(jīng)過反編譯后:
可以看出包含字段或者具體方法的traits使用Java abstract class來(lái)實(shí)現(xiàn)碧绞。
下面是類繼承traits的演示:
當(dāng)然類似于Java中的接口府框,如果有多個(gè)traits的話: