scala进阶14-自身类型self type

/**
  * self不是关键字,是this的别名,具有更强的可读性,无代码中的outer =>
  */
class Self {
  self =>
  val tmp = "Scala"
  def foo = self.tmp + this.tmp //可以用self和this访问自身成员
}

trait S1

/**
  * 高级用法:
  * 1、如下所示,this:S1合在一起,限定创建S2对象时,必须混入S1
  * 2、S2的子类也必须混入S1,如S3
  */
class S2 { this:S1 => }
class S3 extends S2 with S1

trait T {this: S1 => }
object S4 extends T with S1

object Self_Types {
  def main(args: Array[String]): Unit = {
    class Outer { outer => //outer是Outer.this的别名
      val v1 = "Spark"
      class Inner {
        println(outer.v1) //这里也可以是Outer.this.v1(这里是基本用法)
      }
    }
    val c = new S2 with S1
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值