第27节:Scala面向对象内幕实践解密
来源:互联网 发布:java nio attach 编辑:程序博客网 时间:2024/05/17 02:56
下面解释为什么不需要写main方法直接继承App就可以执行方法:
object AppInternals {
}
trait Helper extends DelayedInit {
def delayeinit(body: => Unit) = {
println("this is the initialization code of C")
body //evalutes the initialization code of C
}
}
class C extends Helper {
//scala 2.10.x支持这种写法,2.11.x后就不支持了因为C是个abstract类型
println("this is the initialization code of C")
}
object Test extends App{
val c =new C
println("hello spark")
}
下面写个日志打印的小例子:
package com.dtspark.scala.basics
object Logger {
}
trait _Logger{
def log(msg:String):Unit={
println("Log: "+msg)
}
}
trait RemoteLogger extends _Logger{
override def log(msg:String):Unit={
println("RemoteLogger: "+msg)
}
}
trait NullLogger extends _Logger{
override def log(msg:String):Unit={ }
}
/*trait Data {
val logger =new _Logger{}
def query(input:String):String= {
logger.log(input)
"Result"+ input
}
}*/
trait DataAcess {
//val logger =new _Logger{}
def query(input:String):String= {
// logger.log(input)
"Result"+ input
}
}
/*trait DataAcessWithLogger {
val logger =new _Logger{}
val data =new DataAcess{}
def query(input:String):String= {
logger.log(input)
data.query(input)
}
}*/
/*trait DataAcessWithLogger extends DataAcess with _Logger {
//val logger =new _Logger{}
// val data =new DataAcess{}
override def query(input:String):String= {
log(input)
super.query(input)
}
}*/
trait _LoggerManger{
val logger:_Logger =new _Logger{}
}
trait RemoteLoggerManger extends _LoggerManger{
override val logger:_Logger =new RemoteLogger{}
}
trait NullLoggerManger extends _LoggerManger{
override val logger:_Logger =new NullLogger{}
}
/*trait DataAcessDAO extends _Logger {
//val logger =new _Logger{}
// val data =new DataAcess{}
def query(input:String):String= {
log(input)
"DataAcessDAO Result"
// super.query(input)
}
}*/
trait DataAcessDAO extends _LoggerManger {//可以通过工厂来实例化
//val logger =new _Logger{}
// val data =new DataAcess{}
def query(input:String):String= {
logger.log(input)
"DataAcessDAO Result"
// super.query(input)
}
}
object OOPAdvanced {
def main(args: Array[String]): Unit = {
}
}
- 第27节:Scala面向对象内幕实践解密
- 大数据Spark “蘑菇云”行动前传Scala专家之路第27课:Scala的中面向对象实现的惊人内幕解密
- 第7节:scala面向对象编程
- 大数据Spark “蘑菇云”行动前传Scala专家之路第28课:Scala隐式转换内幕实践解密
- Scala 的面向对象编程实践(一)
- Scala 的面向对象编程实践(二)
- Scala 的面向对象编程实践(三)
- 第10节:scala面向对象编程中的继承
- 第48课: Spark 2.0内幕深度解密和学习最佳实践
- 第9节:从spark源码角度分析scala面向对象思想
- 第42课: Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践
- 第11节:scala面向接口编程
- Scala的面向对象
- Scala面向对象
- Scala面向对象学习
- Scala面向对象
- Scala面向对象
- scala面向对象
- JavaWeb三大组件
- 离散傅里叶变换的复数基础
- NYOJ 最少乘法次数
- vue里函数的调用顺序
- 单片机独立按键
- 第27节:Scala面向对象内幕实践解密
- getResources().getDrawable()方法过时的替代方法
- Machine Learning第六讲[应用机器学习的建议] --(二)诊断偏差和方差
- 栈溢出从入门到放弃(上)
- Farey Sequence POJ
- ORACLE安全管理
- android 关于圆形imageview的做法
- POJ 3308 Paratroopers (最小割)
- 一个简单的多线程下的singleton实现