scala语言(七)-----接口trait、case class 和偏函数

1.trait
trait相当于java中的接口,但用法截然不同
trait中可以定义属性和方法,但是在实现类中需要给属性赋值,方法可以直接调用
trait不可以传参

package zjc

trait  read{
  var age:Int
  def read(name:String){
    println(name + "is reading")
  }
}

trait  listen{
  var sex:Int
  def listen(name:String){
    println(name+"is listening")
  }
}

class person2() extends read with listen {
  override var age: Int = 19
  override var sex: Int = 1
}

object test06 {
  def main(args: Array[String]): Unit = {
    val person1= new person2
    println(person1.listen("zjc"))
    println(person1.read("lff"))
    println(person1.age)
    println(person1.sex)
  }
}

2.trait中有方法没实现
如果trait中有方法没实现,则实现类继承时要将其实现

package zjc

trait wirte{
  def write(name:String)
}


class person3 extends wirte {
  override def write(name: String): Unit ={
    println(s"$name is writring")
  }
}

object test07 {
  def main(args: Array[String]): Unit = {
    val person1: person3 = new person3
    println(person1.write("zjc"))
  }
}

3.模式匹配 case class
模式匹配可以匹配值也可以匹配类型

package zjc

object test08 {
  def main(args: Array[String]): Unit = {
    val tuple=Tuple4(1,2,3,"String")
    val iterator: Iterator[Any] = tuple.productIterator
    while(iterator.hasNext){
      MatchTest(iterator.next())
    }
  }

  def MatchTest(x:Any){
    x match{
      case x:Int=>println("type is Int")
      case 1=>println("result is 1")
      case x:String=>println("type is String")
    }

  }
}

4.偏函数
函数中只有case,就可以定义成偏函数PartialFunction,定义时不能使用括号传参

object test09 {
  def main(args: Array[String]): Unit = {
    println(MyTest("hello"))
  }

  def MyTest:PartialFunction[String ,Int]={   //表示偏函数,只能进来String ,出case
    case "scala"=>1
    case "hello"=>2
  }
}

5.样例类
(1)使用关键字case定义的类就是样例类,当参数是var时,会自动实现setter和getter方法
(2)默认实现了toString,equals等方法

object test10 {
  def main(args: Array[String]): Unit = {
    var p1=new people("zjc",18)
    var p2=new people("zjc",18)
    println(p1.equals(p2))  //样例类比较的是数值,否则比较地址
    println(p1.toString)    //如果不是样例类就是地址
  }

}

case class people(var name:String,var age:Int)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值