scala的trait之我见

本文探讨了Scala中的特质(trait),解释了其与Java接口的区别及如何使用。特质兼具接口的抽象性和类的部分实现特性,能够提供更为灵活的复用机制。

trait近似于java的interface,但也不完全等同。比如,trait可以没有任何的abstract方法,就跟一个普通类一样。
它是被mixin到子类中(动态或静态),而非继承到子类,为何这么说,因为extend一个trait,相当于继承这个trait的超类,同时mixin这个trait。
从某种意义上说,trait兼具“能力抽象”和“能力实现”两方面的特点,前者用C++里public继承的术语讲是is-a,后者用C++里private继承的术语讲是has-a。所以,scala的trait同时具有is-a和has-a两种特点。
一般说来,如果一个trait起到的是类似java interface的用途,我会这样写:
class Derived extends BaseTrait
等价于C++里的:
class Derived public BaseTrait

而如果要具备某些utility函数的能力,我会这样写:
class Derived extends AnyRef with SomeFuncTrait
等价于C++里的
class Derived private SomeFuncTrait

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值