Scala學習:抽象類型
type
現實與代碼不兼容的問題
先拋出一個現實與代碼不兼容的問題。
以下代碼奶牛吃草是正常的,但你把魚也餵給奶牛,它竟然也吃起來了。這顯然是不合理的。
scala通過type
抽象類型解決這個問題
class Food
class Grass extends Food{
override def toString: String = "草"
}
class Fish extends Food{
override def toString: String = "魚"
}
abstract class Animal{
def eat(food: Food)
}
class Cow extends Animal {
override def eat(food: Food): Unit = println(s"奶牛吃 $food")
}
val cow = new Cow
cow.eat(new Grass)
cow.eat(new Fish)
使用type解決不兼容問題
class Food
class Grass extends Food{
override def toString: String = "草"
}
class Fish extends Food{
override def toString: String = "魚"
}
abstract class Animal{
type SuitableFood <: Food
def eat(food: SuitableFood)
}
class Cow extends Animal {
override type SuitableFood = Grass
override def eat(food: Grass): Unit = println(s"奶牛吃 $food")
}
val cow = new Cow
cow.eat(new Grass)
cow.eat(new Fish)