一、關鍵字 1.final關鍵字 用final修飾的類:不能被繼承 用final修飾的方法:不能被重寫 註意:(1)在Scala中變數不需要用final修飾,因為val與var已經限制了變數是否可變 (2)final不能修飾特質,但是可以修飾抽象類 如圖代碼,Pig繼承特質Animal後使用“ctr ...
一、關鍵字
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)
}