7.scala面向对象2

1.介绍scala面向对象2的时候先提下以下几点:

1.1 scala函数是指不依赖于类的,一旦依赖于类的时候,就叫方法,过程就是一个没有返回值的方法

1.2 scala中有类似于lazy级别的操作,lazy的变量在第一次使用时才会被实例化。spark中也有类似的操作,例如spark中Transformation类型的操作都是lazy的,不会触发job执行,Action级别的操作会触发job执行,这在后续的写spark博文时,我将跟大家一起分享和学习

1.3 类可以直接访问Object的成员,甚至时私有的成员

2.子类在继承超类的时候,不会继承超累的Object对象

3.scala 中override 即可复写父类的方法,有可以复写子类的属性,方法可以赋值给属性,属性也可以赋值给方法

4.isInstanceOf和asInstanceOf的区别

isInstanceOf:判断下是不是父类型

asInstanceOf[T] : 将对象强制转换成T类型

classOf[T]: 获取T的Class对象,返回类型的运行时呈现状态。这是一个存根方法,实际的实现是由编译器填补(自动生成)

5.trait:很多书上翻译成特质,实际上他就类似于java的Interface,区别在于trait的方法不一定是抽象方法,当trait中每个方法都是具体的方法的时候,trait就是一个工具类

6.Scala中使用with关键字来实现接口,但也有例外,trait的特殊性:

class SparkContext(config: SparkConf) extends Logging {
虽然Logging是trait,但是在scala的语法中,第一个继承的关键字必须是extends.
7.在scala中trait支持多重继承,但是类和抽象类是不支持多重继承的,即一个类可以继承多个trait,但是只能继承一个抽象类或具体类

8.Scala中有一个抽象属性或抽象成员

抽象属性:未被实例化的属性 val name:String   若定义抽象属性则必须定义类型,因为若不说明类型的话,编译的时候推导不出什么类型,子类中要直接进行赋值

9.Scala的类的实例对象也可以混入接口,当扩展当前对象的实例的功能


trait Logger {
  def log(message:String) {
    println("Logger: " + message)
  }
}

trait RichLogger extends Logger {
  override def log(message: String)  {
    println("RichLogger: " + message)
  }
}

class Loggin(val name:String) extends Logger{
  def logging {
    println("Hi,welcome!" + name)
    log(name)
  }
}

object HelloTrait {

  def main(args: Array[String]): Unit = {
    val personLogin = new Loggin("DTSpark") with RichLogger
    personLogin.logging
  }

}

结果为:

  /* -------------------------------- *
     |  Hi,welcome ! DTSpark |
     |  RichLogger: DTSpark  |
    * ------------------------------*/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值