Scala Trait+Match+PartialFunction+CaseClass(五)

1、Trait
一个类继承trait时,第一个关键字使用extends,之后使用with

trait Read{
  def read(name:String) {
    println(s"$name is reading.....")
  }
}
  trait Listen {
    def listen(name: String) {
      println(s"$name is listening.....")
    }
  }
class  Person() extends Read with Listen {
}
object Demo9_Trait1 {
  def main(args: Array[String]): Unit = {
  val p = new Person()
    p.read("zhangsan")
    p.listen("lisi")
  }
}

Trait中可以有方法体的实现或者方法体中没实现的,子类中要实现未实现的方法

trait IsEquale{
  def isEqu(o:Any):Boolean
  def isNotEqu(o:Any):Boolean = !isEqu(o)
}
class Point(xx:Int,xy:Int)extends IsEquale {
  val x = xx
  val y = xy
  override def isEqu(o:Any):Boolean={
    o.isInstanceOf[Point]&&o.asInstanceOf[Point].x == this.x
  }
}
object Demo10_Trait2 {
  def main(args: Array[String]): Unit = {
    val p1 = new Point(xx=1,xy=2)
    val p2 = new Point(xx=1,xy=3)
    println(p1.isEqu(p2))
    println(p1.isNotEqu(p2))
  }
}

2、Match 模式匹配、

1)case _ 什么都匹配不上,放在最后
2)match可以匹配值,还可以匹配类型
3)匹配过程中会有数值的转换
4)从上网下匹配,匹配上会自动终止
5)模式匹配外面的括号可省略

object Demo11_Match {
  def main(args: Array[String]): Unit = {
    val tp = (1,1.2,"abc",'a',true)
    val iter = tp.productIterator
    iter.foreach(MatchTest)
  }
  def MatchTest(o:Any): Unit ={
    o match {
      case 1=>println("value is 1")
      case i=>println(s"type is Int, value is $i")
      case d=>println(s"type is Double, value is $d")
      case s=>println(s"type is String, value is $s")
      case 'a'=>println("value is a")
      case _=>{println("no match...")}
    }
  }
}

3、偏函数 PartialFunction

偏函数,只能匹配一个值,匹配上返回某个值B
PartialFunction[A,B] A是匹配类型,B是匹配上返回类型

object Demo12_PartialFun {
  def MyTest:PartialFunction[String,Int]={
    case "abc"=>2
    case  "a"=>1
    case _=>200

  }
  def main(args: Array[String]): Unit = {
    val result = MyTest("abc")
    println(result)
    println(MyTest("abcd"))
  }
}

4、样例类 CaseClass

/**
  * 样例类
  * 1、使用case定义的类就是样例类,
  * 实现了类构造参数的getter方法(默认构造被声明为val),
  * 当构造参数是var时,它将帮你实现setter和getter方法
  * 2、样例类默认实现了toString,equals。copy和hashCode等放法
  * 3、样例类可以new,也可以不new
  */
case class Person1(name:String,age:Int){

}
object Demo13_CaseClass {
  def main(args: Array[String]): Unit = {
    val p1 = new Person1("zhangsan",19)
    val p2 = new Person1("zhangsan",19)
    println(p1.equals(p2))
    println(p1)
  }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值