博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala中的trait
阅读量:5796 次
发布时间:2019-06-18

本文共 1447 字,大约阅读时间需要 4 分钟。

hot3.png

这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适。它的意义和java,c#中接口很类似。但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法。

下面我们以一个具体的例子来介绍下trait的使用。

我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait Flyable和Swimable分别表示会飞和会游泳两种特征。

我们先看下Aminmal的实现:

abstract class Animal {  def walk(speed:Int)  def breathe() = {    println("animal breathes")  }}

这里的抽象类Animal定义了walk方法,实现了breathe方法。

我们再看下Flyable和Swimable两个 trait的实现:

trait Flyable {  def hasFeather = true  def fly}trait Swimable {  def swim}

注意Flyable trait中有两个方法,一个是hasFeather方法,这个方法已经实现了,另一个方法是fly方法,这个方法只是定义没有实现,而Swimable trait只是定义个一个swim的方法,没有具体实现。

下面我们定义一种动物,它既会飞也会游泳,这种动物是鱼鹰 FishEagle,我们看下代码:

class FishEagle extends Animal with Flyable with Swimable {  def walk(speed:Int) = println("fish eagle walk with speed " + speed)  def swim() = println("fish eagle swim fast")  def fly() = println("fish eagle fly fast")}

FishEagle类继承自Animal,extends Animal后面有两个with,with Flyable和with Swimable,表示也具备两种特征。

在类的实现中需要实现抽象类Animal的walk方法,也需要实现两个特征中定义的未实现方法。

下面main方法代码:

object App {  def main(args : Array[String]) {  val fishEagle = new FishEagle  val flyable:Flyable = fishEagle  flyable.fly   val swimmer:Swimable = fishEagle  swimmer.swim  } }

 在main方法中,我们首先初始化了一个FishEagle对象,然后通过Flyable和Swimable trait来分别调用其fly和swim方法,输出结果如下:

fish eagle fly fast fish eagle swim fast

trait的使用方法就是这样子了,它很强大,抽象类能做的事情,trait都可以做。它的长处在于可以多继承。

trait和抽象类的区别在于抽象类是对一个继承链的,类和类之前确实有父子类的继承关系,而trait则如其名字,表示一种特征,可以多继承。

转载于:https://my.oschina.net/phoebus789/blog/731020

你可能感兴趣的文章
Web版RSS阅读器(二)——使用dTree树形加载rss订阅分组列表
查看>>
虚拟化环境下对公司业务服务器实现NLB+SQL高可用(一)
查看>>
Synology NAS 存储系统多路径连接Vmware ESXi 6.5
查看>>
群晖NAS的iSCSI设置
查看>>
Linux DHCP 中继代理
查看>>
lduan HyPer-V 简单管理(六)
查看>>
linux系统密码忘记的5个解决方法
查看>>
排序(冒泡排序,插入排序,希尔排序,选择排序,堆排序)
查看>>
PHP_010 时间日期
查看>>
基础算法题
查看>>
Nginx学习之六-nginx核心进程模型
查看>>
根据文字内容自适应的label && scrollview
查看>>
学习资源
查看>>
SQL中判断字符串中只包含或不包含某种字符的方法
查看>>
openstack运维实战系列(六)之neutron配额调整
查看>>
OpenGL基础
查看>>
绘制多边形
查看>>
脚本练习
查看>>
我的友情链接
查看>>
我的友情链接
查看>>