Scala學習:抽象類型

Scala學習:抽象類型

type

現實與代碼不兼容的問題

先拋出一個現實與代碼不兼容的問題。ide

如下代碼奶牛吃草是正常的,但你把魚也餵給奶牛,它居然也吃起來了。這顯然是不合理的。學習

scala經過type抽象類型解決這個問題ui

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)
相關文章
相關標籤/搜索