大数据系列修炼-Scala课程13+14

核心内容:

1、作为接口的trait代码实战
2、在对象中混入trait代码实战

1、作为接口的trait代码实战

1、scala中的trait(特质)功能很强大,Java中抽象类能做的事情,trait都可以做。Java中接口能做的事情,trait也可以做,它的长处在于可以多继承—即trait既可以当做接口来用,也可以当做抽象类来用.
2、在Java当中,接口(interface)就是抽象方法和数值型常量的集合,不能有普通方法,但是在scala当中,trait中可以有普通方法
3、在Java当中,接口只能被实现,不能被继承,但是在scala当中,特质trait可以被继承,如果是第一次使用trait,并且trait前面没有其它的类或者抽象类,就需要使用extends关键字,而后使用with关键字(注意:不是implements关键字)

class A extends B with C //其中BC为特质

代码实现:何为特质trait
我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait :Flyable和Swimable分别表示会飞和会游泳两种特征;然后我们定义一种动物鱼鹰 FishEagle,它既会飞也会游泳.

object App6 
{
   def main(args:Array[String]):Unit=
   {
       val fishEagle = new FishEagle()

       fishEagle.breath
       fishEagle.walk(60)
       fishEagle.fly()
       fishEagle.swim()
   }
}
abstract class Animal {
   def walk(speed:Double)   
   def breath()=            
   {
      println("animal need breathes!")
   }
}
trait Flyable   //定义一个特质:表示会飞的特征
{
   def fly()    
}
trait Swimable  //定义一个特质:表示会游泳的特征
{
   def swim()   
}
class FishEagle extends Animal with Flyable with Swimable //FishEagle继承了一个抽象类并实现了两个特质 {
   def walk(speed:Double)={println("fish eagle walk with speed:" + speed)}
   def fly()=  //实现特质中的方法
   {
     println("fish eagle can fly!")
   }
   def swim()= //实现特质中的方法
   {
     println("fish eagle can swim!")
   }
}

运行结果:

animal can breathes!
fish eagle walk with speed:60.0
fish eagle can fly!
fish eagle can swim!
2、在对象中混入trait代码实战

1、在scala中,通过trait我们可以将一些具体实现的方法混入到我们的类或对象中.(注意:创建对象时混入特质,要重写trait中的抽象方法 )

代码实例:

object App6 
{
   def main(args:Array[String]):Unit=
   {
        val fishEagle = new FishEagle()  with FlySwim  //混入一个特质
        fishEagle.breath()
        fishEagle.walk(60.0)
        fishEagle.fly()
        fishEagle.swim()
   }
}
abstract class Animal 
{
   def walk(speed:Double)   
   def breath()=            
   {
      println("animal can breathes!")
   }
}
trait Flyable 
{
   def fly()    
}
trait Swimable
{
   def swim()   
}
trait FlySwim extends Flyable with Swimable //接口实现多继承
{
   def fly()=
   {
     println("fish eagle can fly!")
   }
   def swim()=
   {
     println("fish eagle can swim!")
   }
}
class FishEagle extends Animal
{
   def walk(speed:Double)={println("fish eagle walk with speed:" + speed)}
}

运行结果:

animal can breathes!
fish eagle walk with speed:60.0
fish eagle can fly!
fish eagle can swim!

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

你可能感兴趣的:(scala,spark)