这意味着定义trait Option[T]
与 相同trait Option[+T]
。
很容易认为val humanOpt: Option[Human]
can 指向一个Option[Student]
实例,就像val humanOpt: Human
can 指向一个Student
实例一样。
也许这看起来有些奇怪,但我为什么要考虑这个?
Java 变量默认为多态,与 c++ 相比,它应该使用virtual
关键字。我认为在 Java 中简化 OO 很重要。
Scala 在许多与 Java 相比更频繁的用例中使用高阶类型,例如Option
,Try
或者自己定义 a Cache[T]
。
此外,它仍然符合 Liskov Substitution 原则。
我只想知道为什么不将协变简化为默认行为?