大数据系列修炼-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. ...
随机推荐
- hibernate 基本和简单易用
首先hibernate.cfg.xml构造,在该文件src文件夹 <!DOCTYPE hibernate-configuration PUBLIC "-// ...
- QoS令牌桶工作原理
QoS的一个重要作用就是对port流量进行监管,也就是限制port流量.但QoS是怎样做到这点的呢?那就是QoS的令牌桶机制了.以下是在笔者刚刚出版的<Cisco/H3C交换机高级配置与管理技术 ...
- DapperLambda发布
DapperLambda发布 引言:因为接触过多个ORM,但使用的时候都遇到了各自的一些不够理想的地方,从最早开始开始公司自己分装的,到后面用EF,以及Dapper和DapperExtensions ...
- 认识Backbone (四)
Backbone.View(视图) 视图的核心是处理数据业务逻辑.绑定DOM元素事件.渲染模型或者集合数据. 添加DOM元素 render view.render() render 默认实现是没有操 ...
- Nginx各版本的区别
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- 做一个自动修改本机IP和mac的bat文件
原文:做一个自动修改本机IP和mac的bat文件 1.ip bat修改理论探讨 前两天我突然萌生了一个念头:能不能做一个小程序来实现自动配置或修改IP和mac,达到一键搞定的目的,这样尤其适合那些带着 ...
- SICP-2锻炼.34
[锻炼2.34] 为x给定值,找到一个多项式x的值,它也可以被形式化为累积. 下多项式的值: an*x^n + an-1*x^n-1 + .... + a1*x + a0 採用著名的Horner规则, ...
- 微通道产品经理Grover采访:美国的微通道设计
"'哥'在中国是一种尊称吗?哈哈.我们平时都叫张小龙'龙哥'." "是的.Dan哥,当你认为某个人牛逼的时候,你就能够叫他'哥'." 我对于Dan Grover ...
- InputMonitor注意事项
文章只记录自己的点点理解.为了你自己的参考. 1.mInputFocus WMS.addWindow()-->WMS.finishUpdateFocusedWindowAfterAssignLa ...
- js便签笔记(13)——jsonp事实上非常easy【ajax跨域请求】
前两天被问到ajax跨域怎样解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了很多资料,原来如此.. . 为何一直知道jsonp,但一直迷迷糊糊的不明 ...