大数据系列修炼-Scala课程56

大数据系列修炼-Scala课程56

核心内容:
1、Scala中Self Types(this)操作代码实战

1、Scala中Self Types操作代码实战

1>每个类本身都有一个this指针,通过this指针可以引用自身的实例;在自身类型当中,self不是关键字,是this的别名,
具有更强的可读性。
2>在Scala当中,可以在类中、特质中、object中对自身类型this进行限制约束。
class S2{this:S1=》} 的含义:
1、限定创建S2对象时,必须混入S1特质
2、S2的子类也必须混入S1
通过对自身类型的限制,导致自身类型变的抽象化了。
3>在scala当中,自身类型this的约束限制也可以用在trait、object中。
4>通过自身类型限制的方式,可以很好的限制我们的类型以及行为。

实例程序1:self不是关键字,是this的别名

object App6 
{   
    def main(args:Array[String]):Unit=
    { 
       val outer1 = new Outer()
       val inner1 = new outer1.Inner
       inner1.fun()  //引用内部类对象的方法 //输出为Spark
    }   
}
class Outer
{outer=>  //outer实际上是Outer.this的别名
   val v1 = "Spark"
   class Inner
   {
      def fun() = println(outer.v1)  //outer.v1等价于Outer.this.v1
   }
}

实例程序2:

//本程序的重点是掌握Scala中的Self Types的应用
trait S1
{
   def fun():Unit 
}
class S2{this:S1=>}  //限制创建S2对象时,必须混入S1这个特质
class S3 extends S2 with S1 //S2的子类也必须混入S1
{
   def fun() = println("Hadoop")
}
trait T{this:S1=>}  //T的子类也必须混入S1
object S4 extends T with S1
{
  def fun() = println("Spark")
}
object App 
{   

   def main(args:Array[String]):Unit=      
   {  
      val s2 = new S2 with S1  //创建S2对象时,混入了S1特质
      {
         def fun() = println("Spark")
      }
   }
}

如有问题,欢迎留言指正!

你可能感兴趣的:(scala,大数据)