Scala-Unit6-final/type关键字、样例类&样例对象

一、关键字

  1.final关键字

  用final修饰的类:不能被继承

  用final修饰的方法:不能被重写

  注意:(1)在Scala中变量不需要用final修饰,因为val与var已经限制了变量是否可变

     (2)final不能修饰特质,但是可以修饰抽象类

trait Animal {
  def eat(name:String)

  final def sleep(name:String):Unit ={
    println(s"$name ->睡得天花乱坠")
  }
}

  如图代码,Pig继承特质Animal后使用“ctrl + o”快捷键想重写sleep方法,但是没有显示。

  2.type关键字:别名设置

    命令行操作:type S = String  //用S代替String

          val name:S = "dilireba"

trait Anl {
  type T

  def sleep(str:T):Unit={
    println(str)
  }
}

object AnlTest extends Anl {
  override type T = String

  def main(args: Array[String]): Unit = {
    AnlTest.sleep("很香")
  }
}

   如上代码:AnlTest继承Anl特质,重写Type T为String类型。

   type可以让我们的程序变得更灵活!

 

二、样例对象&样例类

  1.样例类:case class,它是特殊的类,可以用于模式匹配。

    写法:case class 类名(属性)

    当一个类被声明为样例类时,Scala编译器会自动为我们做一下工作:

    (1)样例类的构造器中的参数默认为val类型,也可以声明为var,但不推荐;

    (2)为样例类自动创建伴生对象,并且在其中实现apply方法,使我们使用时不用new直接使用;

    (3)在伴生对象中实现unapply方法,用于模式比配。

case class Boy(high:Int,weight:Int)
case class Girl(high:Int,weight:Int)

object TestSex extends App {
  def objMatch(obj:Any) = obj match{
    case Boy(x,y) => println(s"boy $x high $y weight")
    case Girl(x,y) => println(s"gril $x high $y weight ")
  }

  objMatch(Boy(180,150))
  objMatch(Girl(165,95))
}

  2.样例对象:不能封装数据,支持模式匹配

    写法:case object 类名(属性)

    case object Check

    match{

      case "Check" => println(Check)

    }

 

posted @ 2019-01-17 18:59  给你一个公主抱  阅读(698)  评论(0编辑  收藏  举报