scala中的trait
2016-02-21 12:19
561 查看
这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适。它的意义和java,c#中接口很类似。但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法。
下面我们以一个具体的例子来介绍下trait的使用。
我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait Flyable和Swimable分别表示会飞和会游泳两种特征。
我们先看下Aminmal的实现:
View Code
在main方法中,我们首先初始化了一个FishEagle对象,然后通过Flyable和Swimable trait来分别调用其fly和swim方法,输出结果如下:
trait的使用方法就是这样子了,它很强大,抽象类能做的事情,trait都可以做。它的长处在于可以多继承。
trait和抽象类的区别在于抽象类是对一个继承链的,类和类之前确实有父子类的继承关系,而trait则如其名字,表示一种特征,可以多继承。
下面我们以一个具体的例子来介绍下trait的使用。
我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait Flyable和Swimable分别表示会飞和会游泳两种特征。
我们先看下Aminmal的实现:
object App { def main(args : Array[String]) { val fishEagle = new FishEagle val flyable:Flyable = fishEagle flyable.fly val swimmer:Swimable = fishEagle swimmer.swim } }
View Code
在main方法中,我们首先初始化了一个FishEagle对象,然后通过Flyable和Swimable trait来分别调用其fly和swim方法,输出结果如下:
fish eagle fly fast fish eagle swim fast
trait的使用方法就是这样子了,它很强大,抽象类能做的事情,trait都可以做。它的长处在于可以多继承。
trait和抽象类的区别在于抽象类是对一个继承链的,类和类之前确实有父子类的继承关系,而trait则如其名字,表示一种特征,可以多继承。
相关文章推荐
- vector::clear()和vecotr::pop_back()对内存处理的不同 http://blog.csdn.net/vieri_ch/article/details/1191390
- 关于破解AI的补丁和方法
- hdu 1151 Air Raid(最小路径覆盖)
- CodeForces 630 A. Again Twenty Five!(水~)
- git@xxxx.git: Auth fail错误
- poj-3007 Organize Your Train part II
- 关于linker command failed with exit code 1 (use -v to see invocation)错误
- 最近学习
- .NET Task的新认识
- async和await
- Agent admitted failure to sign using the key
- 关于async和await的一些误区实例详解
- 遇到IOError: CRC check failed这样的问题的可能解决方法
- failed to obtain a cell from its dataSource
- hibernate中实体domain对象的生命周期
- android camera setParameters failed 类问题分析总结
- PIPE和socketpair的区别
- 四、再谈PyTypeObject http://blog.csdn.net/debugm/article/details/8243496
- 自己生成非官方iPhone toolchain的头文件
- HDU 2476 String painter(区间dp)