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 Tdef sleep(str:T):Unit={println(str)} }object AnlTest extends Anl {override type T = Stringdef 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)
}
?
轉載于:https://www.cnblogs.com/HelloBigTable/p/10283972.html
總結
以上是生活随笔為你收集整理的Scala-Unit6-final/type关键字、样例类样例对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis从入门到精通:update
- 下一篇: JAVA线程之生产者消费者问题