※Trait
trait 類似 java 的 interfacetrait Animal {
def setName(name: String): Unit
def getName(): Unit = print("taipei zoo")
}
class Cat extends Animal {
override def setName(name: String): Unit = {
println(name)
}
}
val c = new Cat()
c.setName("tiger")
c.getName()
※也可以直接在 trait 裡實作
※加泛型
trait Add[I1,I2,S] {def calc(p1: I1, p2: I2): S
}
class Operator extends Add[Int, Int, Int] {
override def calc(p1: Int, p2: Int): Int = p1 + p2
}
val op = new Operator()
print(op.calc(9,7))
※多繼承
abstract class A {val msg: String
}
class B extends A {
override val msg = "xxx"
}
trait C1 extends A
trait C2
class D extends B with C1 with C2
※和 java 一樣,extends 還是只能繼承一個,實作可多個,但關鍵字變成 with 了
※Object
類似 java 的 staticobject Singleton {
private var count = 0
def instance(): Int = {
count += 1
count
}
}
val c1: Int = Singleton.instance()
println(c1) // 1
val c2: Int = Singleton.instance()
println(c2) // 2
※正則
// val regex = "\\d+".r
val regex = new Regex("\\d+")
println(regex.matches("123"))
regex.findFirstMatchIn("123") match {
case Some(_) => println("good")
case None => println("bad")
}
※字串加 .r 可以變成正則
沒有留言:
張貼留言