疑惑
1、没有协变,就不可以使用子类替代父类么?
在没有协变(covariance)的情况下,确实无法直接将子类对象替换为父类对象,尤其是在类型系统严格的语言中。在这些语言中,类型参数不会自动协变,因此必须严格匹配。协变允许在特定情况下使用子类替代父类,而不破坏类型安全。若不支持协变,就需要手动进行类型转换,可能会带来额外的复杂性或安全风险。
例如,在 Objective-C 中,NSArray 默认是协变的,所以可以用 NSArray<Child *> *
替换 NSArray<Parent *> *
。但在不支持协变的场景中(例如,某些泛型严格的语言),将需要更多的类型检查或转换操作。
Last updated