zoukankan      html  css  js  c++  java
  • Scala的特质

    一:

      关键字:trait。

      使用方式:通过extends和with方式的混入特质。

      使用场景:当我们不想扩展其它的类的时候必须使用entends,当我们需要扩展其它类的时候,就必须使用with,可以混入多个特质,连续使用with即可。

      Ordered特质:主要用于对象之间的比较,和Java的Comparable类似。
      特质的作用:可以实现堆叠的改变,代码中的例子是对一个队列的元素进行加倍,加1,和过滤。

    二:特质的例子

    package 特质
    
    /**
      * @Author:Alex_lei
      * @Description:
      */
    object Trait {
      def main(args: Array[String]): Unit = {
        val lbld = new Lbld
        lbld.f()
    
        val d:Dog = lbld
        d.f()
    
        val tt = new Test_trait
        tt.say
        tt.f()
      }
    }
    
    /**
      * 使用extends混入特质
      */
    class Lbld extends Dog{
    
      override def f(): Unit = println("I am lbld")
    
    }
    
    
    
    /**
      * trait叫特质,是Scala里面代码复用的基础单元,没有类参数这个用法。
      * 通过混入的方式到类中
      * 类可以混入多个特质
      * 与Java的接口类似
      */
    trait Dog{
      def f(): Unit ={
        println("I am dog")
      }
    }
    
    class Animal{
      val say = println("I am an animal")
    }
    
    /**
      * 需要继承某个父类,然后使用with关键字混入特质
      */
    class Test_trait extends Animal with Dog{
      override val say: Unit = println("extends Animal")
    
      override def f(): Unit = println("with Dog")
    
    }
    
    /**
      * 使用extends和with分别是什么场景
      * 该类如果不扩展其它的类,那么就必须用extends
      * 如果想要扩展其它的类,就必须用with,可以混入多个特质,每个特质前面跟一个with关键字
      */
    

     三:Ordered特质

    package 特质
    
    /**
      * @Author:Alex_lei
      * @Description: 当我们想对某几个对象进行排序时,并不需要定义四个比较运算符
      *              直接使用Ordered特质即可,混入Ordered特质,重写compare方法。
      */
    object Orderd {
      def main(args: Array[String]): Unit = {
        val p1 = new People("alex",22,"beijing")
        val p2 = new People("Lily",21,"shanghai")
        val bool = p1>p2
        println(bool)
      }
    }
    
    class People(val name:String,val age:Int,val add:String) extends Ordered[People]{
    
      override def compare(that: People): Int = {
        this.name.compareTo(that.name)
      }
    }
    
  • 相关阅读:
    【疑难系列】 是程序卡住了还是怎么了?
    【疑难系列】 一个看起来是数据库死锁的问题
    求求别再这么用log4x了
    如何动态在spring mvc中增加bean
    java中被各种XXUtil/XXUtils辅助类恶心到了,推荐这种命名方法
    少搞点语法糖,多写点功能
    记一次在java中的日期parse错误
    《自控力》读后感·一
    实现数据权限控制的一种方法
    10个必会的 PyCharm 技巧
  • 原文地址:https://www.cnblogs.com/lyr999736/p/11336941.html
Copyright © 2011-2022 走看看