大数据系列修炼-Scala课程13+14
2016-08-12 16:20
525 查看
核心内容:
1、作为接口的trait代码实战
2、在对象中混入trait代码实战
1、scala中的trait(特质)功能很强大,Java中抽象类能做的事情,trait都可以做。Java中接口能做的事情,trait也可以做,它的长处在于可以多继承—即trait既可以当做接口来用,也可以当做抽象类来用.
2、在Java当中,接口(interface)就是抽象方法和数值型常量的集合,不能有普通方法,但是在scala当中,trait中可以有普通方法
3、在Java当中,接口只能被实现,不能被继承,但是在scala当中,特质trait可以被继承,如果是第一次使用trait,并且trait前面没有其它的类或者抽象类,就需要使用extends关键字,而后使用with关键字(注意:不是implements关键字)
代码实现:何为特质trait
我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait :Flyable和Swimable分别表示会飞和会游泳两种特征;然后我们定义一种动物鱼鹰 FishEagle,它既会飞也会游泳.
运行结果:
1、在scala中,通过trait我们可以将一些具体实现的方法混入到我们的类或对象中.(注意:创建对象时混入特质,要重写trait中的抽象方法 )
代码实例:
运行结果:
如有问题,欢迎留言指正!
1、作为接口的trait代码实战
2、在对象中混入trait代码实战
1、作为接口的trait代码实战 |
2、在Java当中,接口(interface)就是抽象方法和数值型常量的集合,不能有普通方法,但是在scala当中,trait中可以有普通方法
3、在Java当中,接口只能被实现,不能被继承,但是在scala当中,特质trait可以被继承,如果是第一次使用trait,并且trait前面没有其它的类或者抽象类,就需要使用extends关键字,而后使用with关键字(注意:不是implements关键字)
class A extends B with C //其中B与C为特质
代码实现:何为特质trait
我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait :Flyable和Swimable分别表示会飞和会游泳两种特征;然后我们定义一种动物鱼鹰 FishEagle,它既会飞也会游泳.
object App6 { def main(args:Array[String]):Unit= { val fishEagle = new FishEagle() fishEagle.breath fishEagle.walk(60) fishEagle.fly() fishEagle.swim() } } abstract class Animal { def walk(speed:Double) def breath()= { println("animal need breathes!") } } trait Flyable //定义一个特质:表示会飞的特征 { def fly() } trait Swimable //定义一个特质:表示会游泳的特征 { def swim() } class FishEagle extends Animal with Flyable with Swimable //FishEagle继承了一个抽象类并实现了两个特质 { def walk(speed:Double)={println("fish eagle walk with speed:" + speed)} def fly()= //实现特质中的方法 { println("fish eagle can fly!") } def swim()= //实现特质中的方法 { println("fish eagle can swim!") } }
运行结果:
animal can breathes! fish eagle walk with speed:60.0 fish eagle can fly! fish eagle can swim!
2、在对象中混入trait代码实战 |
代码实例:
object App6 { def main(args:Array[String]):Unit= { val fishEagle = new FishEagle() with FlySwim //混入一个特质 fishEagle.breath() fishEagle.walk(60.0) fishEagle.fly() fishEagle.swim() } } abstract class Animal { def walk(speed:Double) def breath()= { println("animal can breathes!") } } trait Flyable { def fly() } trait Swimable { def swim() } trait FlySwim extends Flyable with Swimable //接口实现多继承 { def fly()= { println("fish eagle can fly!") } def swim()= { println("fish eagle can swim!") } } class FishEagle extends Animal { def walk(speed:Double)={println("fish eagle walk with speed:" + speed)} }
运行结果:
animal can breathes! fish eagle walk with speed:60.0 fish eagle can fly! fish eagle can swim!
如有问题,欢迎留言指正!
相关文章推荐
- Paint 的一个小知识点
- 大数据量下高并发同步的讲解(不看,保证你后悔!)
- 排序分析 转自http://blog.csdn.net/amazing7/article/details/51603682
- IJCAI 10年(2007-2016)最佳论文合集
- distribution 中一直在运行 waitfor delay @strdelaytime 语句
- 在北美闪存峰会上的报告——NVMe SSD数据保护技术
- 国际人工智能顶级会议
- Ubuntu下Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
- 初探Spark-使用大数据分析2000W行数据
- 如何使用KeyChain保存和获取不变的UDID
- 关于vsftp出现Restarting vsftpd (via systemctl): Job for vsftpd.service failed because the control 的解决办法
- 从小白到月薪上万,一份完整的数据分析师自我成长书单
- 从传统企业谈大数据的战略意义
- 从传统企业谈大数据的战略意义
- 从传统企业谈大数据的战略意义
- 设计模式之责任链模式--- Pattern chain-of-responsibility
- 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
- 提升R语言运算效率的11个实用方法
- http://blog.csdn.net/xiaojianpitt/article/details/7445603
- Spark的这些事<二>——几个概念