大数据系列修炼-Scala课程05
Scala多重继承、构造器的执行顺序、AOP实现
- 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实现
- 多重继承构造器执行顺序:多重继承构造器执行顺序是从左到右按次序执行,如果前面类以及被继承实现了,后面的类就没有必要去实现,父类只需执行一次
object triatScala {
def main(args: Array[String]): Unit = {
val t1 = new PianoTeacher
t1.playPiano
t1.teach
}
}
//公共父类
class Human{
println("Human")
}
//继承父类的接口
trait TTeacher extends Human {
println("TTeacher")
def teach
}
//继承父类的接口,并且拥有自己的方法
trait PianoPlayer extends Human {
println("PianoPlayer")
def playPiano = {println("I’m playing piano. ")}
}
//继承父类的类并且混入两个接口实现接口中的方法 实现顺序是按照从左到右
class PianoTeacher extends Human with TTeacher with PianoPlayer {
override def teach = {println("I’m training students. ")}
}
- 基于trait的AOP代码实现:接口被另外一个接口继承并且在实现父类方法的时候也调用父类中抽象方法,在另外一类中是具体实现该公共接口的方法,这样就可以实现AOP(面向切面编程)
//AOP 面向切面编程
trait Action {
def doAction
}
trait TBeforeAfter extends Action {
//使用抽象方法覆盖父类的接口实现中需要制定父类的方法,这个方法在具体的类中实现
abstract override def doAction {
println("Initialization")
super.doAction
println("Destroyed")
}
}
class Work extends Action{
//具体实现父类方法
override def doAction = println("Working...")
} object triatScala {
def main(args: Array[String]): Unit = {
val work = new Work with TBeforeAfter
work.doAction
}
}
包的定义以及包对象、包引用、包的隐式引用实现
- 包定义:Scala中包的定义是可以在一个公共的包下面创建多个包,需要某个包里的类的实例对象,就可以new这个包下面的对象,包也带上
- 包对象实现:包对象里面的方法和属性,在其他的包中可以访问他们
- 包的引用实现:引用某个包中相关类用import后面用{}包括所引用的对象,也可以用java中的包=>用来换用别名,而_表示下面所有包
package com.scala.spark
package object people {
val defaultName = "Scala"
} package people {
class people {
var name = defaultName
}
} import java.awt.{Color,Font}
import java.util.{HashMap=>JavaHashMap}
import scala.{StringBuilder => _}- 包隐式引用实现:Scala中有几个隐式包例如java.lang._,scala._,predef_这三个包,好比java中几个公共包一样,也是拥有很多工具方法。
关于Scala中包、类、对象、成员、伴生类、伴生对象的访问权限
- 包、类、对象、成员的访问权限:private[包名]表示该方法、包、类、对象、成员访问权限扩展到该包下面
- 伴生类、伴生对象访问权限:伴生对象与伴生类可以相互访问
package spark{
package navigation{
//private[spark]表示该类在spark包下有访问权限
private[spark] class Navigator{
//protected[navigation]表示该方法在navigation包下有访问权限
protected[navigation] def useStarChart() {}
class LegOfJourney {
//private[Navigator]表示该常量在navigation包下有访问权限
private[Navigator] val distance =100
}
//private[this]表示该常量在navigation包下有访问权限
private[this] var speed = 200
}
}
package launch{
import navigation._
object Vehicle {
//private[launch]表示该常量在launch该同级的包可以实例化
private[launch] val guide = new Navigator
}
}
}
Scala中文件的读写、控制台输入操作
- 文件的读写实现:文件的读取用source对象中的fromFile方法读取文本中数据也可用fromURL按照url进行读取,而写入用PrintWriter来实现
- 控制台操作实现:Console.readLine来实现控制台操作,console这在Scala的隐式包中,可以直接使用
今天就学到这儿.....
百度视频地址:http://pan.baidu.com/s/1ntzOmDz
大数据系列修炼-Scala课程05的更多相关文章
- 大数据系列修炼-Scala课程01
简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...
- 大数据系列修炼-Scala课程03
前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...
- 大数据系列修炼-Scala课程07
由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...
- 大数据系列修炼-Scala课程06
关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...
- 大数据系列修炼-Scala课程04
Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...
- 大数据系列修炼-Scala课程08
接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性 关于Type.Array.List.Tuple模式解析 1.Type模式匹配代码解析 //关于Type类型的模式匹配 //匹配 Int类型. ...
- 大数据系列修炼-Scala课程02
Scala数组操作实战详解 接着昨天的课程,下面我们继续学习关于Scala数组操作详解.Scala数组的定义 //数组定义 //定长数组格式 /** * val arrayName = new Arr ...
- 大数据系列修炼-Scala课程11
接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer ...
- 大数据系列修炼-Scala课程10
今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...
随机推荐
- 经纬Zhang英拉垫背的企业家VC没有到这种地步这么卑鄙
经纬的合伙人张颖前不久发了一篇名为<泡沫就在那里------致经纬系CEO的一封信>,这篇文章所提到的泡沫论在业界引发了强烈的反响,随后有评论觉得,这明明是VC(风险投资)们自己的危机,为 ...
- 新浪微博id的62进制转换
某条微博链接 某条微博的链接如下,同样省略了后面的无关参数 http://weibo.com/2803301701/CeaOU15IT CeaOU15IT为这条微博的mid,与之相对应的还有一个id, ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 解决Nginx的connect() to 127.0.0.1:8080 failed (13: Permission denied) while connect
在进行Nginx+Tomcat 负载均衡的时候遇到了这个权限问题,在error.log日志中.我们能够看到例如以下: connect() to 127.0.0.1:8080 failed (13: P ...
- lua.c:80:31: fatal error: readline/readline.h: No such file or directory
make linuxcd src && make linuxmake[1]: Entering directory `/root/lua/lua-5.3.2/src'make all ...
- EL与JSTL注意事项汇总
EL使用表达式(5一个 问题) JSTL使用标签(5问题) 什么是EL.它可以用做? EL全名Expression Language在JSP使用页面 格公式${表达式} 样例${requestScop ...
- 【BZOJ1791】【IOI2008】【基环树】island(status第一速度)
1791: [Ioi2008]Island 岛屿 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 908 Solved: 159 [Su ...
- Raw-OS互斥的源代码分析的量的Mutex
作为分析的内核版本2014-04-15,基于1.05正式版.blogs我们会跟上的内核开发进度的最新版本,如果出现源代码的目光"???"的话,没有深究的部分是理解. Raw-OS官 ...
- hdu 5030 Rabbit's String(后缀数组&二分法)
Rabbit's String Time Limit: 40000/20000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 有关Struts2a的ction直接使用response异步问题
假设我们在项目中使用struts2,正在使用ajax而通信时后端程序.为简单起见,我们经常使用下面的方法: ActionContext ac = ActionContext.getCo ...