Scala学习7之scala与java不同之总结3-特质和接口

14 篇文章 0 订阅


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就比较麻烦





Scala中的特质(Trait)是一种抽象机制,可以定义一组方法和字段,可以被混入(Mix-in)到类中,用于扩展类的功能。特质可以被多个类混入,从而实现了多重继承的效果。特质的定义方式类似于类,使用trait关键字。 Java中的接口(Interface)是一种抽象机制,可以定义一组方法,但不能定义字段。接口可以被类实现,用于实现多态性和封装性。接口的定义方式使用interface关键字。 Scala特质Java接口有以下联系和区别: 1. 联系:Scala特质Java接口都是一种抽象机制,用于定义一组方法,实现代码复用和多态性。 2. 区别: - 定义方式:Scala特质使用trait关键字定义,可以定义方法和字段,可以被类混入;Java接口使用interface关键字定义,只能定义方法,不能定义字段。 - 实现方式:Scala特质可以被类混入,实现多重继承的效果;Java接口只能被类实现,实现单一继承的效果。 - 默认实现:Scala特质可以定义具体的方法实现,被混入的类可以直接使用;Java接口只能定义抽象方法,需要被实现类重写。 - 混入顺序:Scala特质可以定义继承顺序,被混入的类会按照特质的顺序依次调用方法;Java接口没有定义继承顺序,实现类需要自行实现方法。 - 动态混入:Scala特质可以在运行时动态混入到类中;Java接口只能在编译时实现。 综上所述,Scala特质Java接口更加灵活和强大,可以实现更多的功能和代码复用。但是,在实际应用中,需要根据具体的情况选择使用哪种机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值