1.scala和java为了避免出现菱形继承的问题,都只能继承一个类,但都可以继承多个特质(scala)或者接口(java);
java中使用接口interfere,接口里面只能包含抽象方法,不能包含字段,也不能包含具体的方法;
而scala使用的是特质trait,既可以包含抽象方法,也可以包含具体方法;而且在trait中,抽象方法不用abstract声明
,子类继承时也不用override说明。
2.java对于具体方法,需用使用另外一个类来扩展该接口的类,来具体实现该方法,一般成为适配器,比如MouseAdapter;
而scala可以直接使用超类的具体方法和抽象方法
3.scala中继承超类和特质时,超类中的字段还是超类的字段,但是特质的字段变成了子类的字段
4.特质继承从右往左,特质构造继承从左往右,在超类后,子类前进行构造
5.特质与类唯一的差别是特质不能使用构造器参数。但特质需要参数时,继承需要提前定义,不然特质中的继承字段只会发生在匿名子类中
val acct =new{val filename="Myapp.log"} with SavingAccount with FileLogger
因为特质构造在子类之前
或者在特质中使用lazy
6.特质也可以继承类,但是子类再继承的时候会把这个当作超类
7.scala支持闭包:即任何作用域内都可以定义函数,该函数可以获取相对应作用域类的任何变量,函数可以在变量不再处于左右域市被调用,java7不支持
8.柯里化:可以将函数的参数进行拆分,比如接受一个参数返回新的函数
9.scala支持伴生对象object,很方便实现单例,但是java就比较麻烦