| 输入 | 逆变(放宽) |
|---|---|
| 输出 | 协变(收窄) |
| 原因 | 满足契约的替换语义 |
语言示例
语言示例
// Java:返回类型协变,参数不变(需重载模拟逆变)
// C#:支持 in/out 变体声明
// TypeScript:方法参数双变,需额外注意安全性参数类型可以放宽(逆变:子类接受更宽输入),返回类型可以收窄(协变:子类返回更具体类型);语言若不允许表达更宽参数,常用重载或 Object 参数配合运行时校验。
| 输入 | 逆变(放宽) |
|---|---|
| 输出 | 协变(收窄) |
| 原因 | 满足契约的替换语义 |
// Java:返回类型协变,参数不变(需重载模拟逆变)
// C#:支持 in/out 变体声明
// TypeScript:方法参数双变,需额外注意安全性