Scala學習:抽象類型

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章