栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号