第27节:Scala面向对象内幕实践解密


下面解释为什么不需要写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 = {
    
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值