abstract class Animal{
val name: String
}
case class Dog(name:String) extends Animal
case class Cat(name:String) extends Animal
abstract class Printer[-A]{
def print(list:List[A]):Unit
}
class DogPrinter extends Printer[Dog]{
def print(dogs: List[Dog]): Unit ={
dogs.foreach(dog=>println(s"${dog.name} is print"))
}
}
class AnimalPrinter extends Printer[Animal]{
def print(animals: List[Animal]): Unit ={
animals.foreach(animal=> println(s"${animal.name} is print"))
}
}
object test {
def main(args: Array[String]): Unit = {
val dogs=List(new Dog("gg"),new Dog("ff"))
def myprint(printer: Printer[Dog]): Unit ={
printer.print(dogs)
}
def myprint1(printer: Printer[Animal]): Unit ={
printer.print(dogs)
}
val dogprinter=new DogPrinter
val animalprinter=new AnimalPrinter
myprint(dogprinter)
myprint(animalprinter)
// myprint1(dogprinter) 报错 逆变不可以知道子
myprint1(animalprinter)
}
}
scala协变逆变
最新推荐文章于 2019-06-15 11:18:47 发布