Construction for Reuse

博客介绍了行为子类型和Liskov Substitution Principle (LSP)。行为子类型有编译器强制规则及行为指定规则;LSP要求子类满足特定条件。还阐述了型变,包括协变、逆变和不变三种类型,且指出Java只支持协变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Behavioral subtyping(行为子类型) and Liskov Substitution Principle (LSP)

Behavioral subtyping
·假设q(x)是关于T类型的对象x的一个可证明的属性,那么q(y)应该是关于S类型的对象y的可证明的,其中S是T的子类型

Java中编译器强制的规则:
1.子类型可以添加,但不能删除方法
2.具体类必须实现所有未定义的方法
3.重写方法必须返回相同的类型或子类型
4.重写方法必须接受相同的参数类型
5.重写方法不能抛出额外的异常

同样适用于指定的行为:
1.相同或更强的不变量
2.所有方法相同或更强的后置条件
3.所有方法相同或更弱的前置条件

LSP
1.子类满足相同的不变量(和附加的不变量)
2.覆盖方法启动(start)的前置条件较弱
3.覆盖方法制动(brake)的后置条件较强

Variance
型变是指当子类型关系出现在更加 复杂类型中时,如何处理新类型中的子类型关系

Three types of variance
1.Covariant(协变): Subtyping is preserved. If List is a subtype of List. 保持子类型关系
2.Contravariant(逆变): Subtyping is reversed. If List is a subtype of List. 反转了子类型关系
3.Invariant(不变): Neither List nor Listis a subtype of the other. 没有子类型关系
注·:java只支持协变
选B
选B。由于协变,要保持子类型关系,并且在这里插入图片描述
所以子类型是Double。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值