Liskov 替换原则告诉我们,如果 A 是 B 的子类型,那么我们可以用类型 B 做的所有事情都应该能够用类型 A 做。
因此,为了进一步调查,我创建了以下内容:
class Animal
class Dog extends Animal
class BlueDog extends Dog
我明白为什么我不允许这样做
val c: Array[Animal] = a
因为数组在 Scala 中不是协变的(就像在 Java 中一样)。
但是,我认为我应该能够做到:
val a: Array[Dog] = Array(new Dog())
val b: Array[BlueDog] = a
我希望 val b 没问题。但我得到:
class Array is invariant in type T. You may wish to investigate a wildcard type such as `_ >: ...