Answers:
不变-SelfDrivingVehicle的模板在所有子类型中均保持不变,即它执行覆盖行为以到达目的地的顺序。
让我们在这里假设另一种方法
-List<SelfDrivingVehicle> vehicles
+Add(SelfDrivingVehicle vehicle)
vehicles.add(vehicle)
前提条件-SelfDriveVehicle的“基本类型”中没有车辆(此处为“添加”),并且处于“弱化前提条件”中,该子类型无法通过更改属性车辆和显式加强其任何子类型来更改。任何子类型只能调用Add。
后置条件-调用“添加”后,“基本类型”处于“增强后置条件”中,该子类型不能通过更改车辆的值来减弱。
调用添加行为后,基本类型的状态将返回其原始状态。
这个例子几乎被打死了,但考虑正方形/矩形或圆形/椭圆形的可能性。假设您有一个基类Rectangle,它定义了一个长度和宽度的对象。如果您的Square类继承了Rectangle类,则其setter / getter中将有一条规则,要求对长度或宽度的任何更改都将更改其对应项。这些尺寸要求加强了前提条件,因为用矩形代替正方形的矩形将缺少这些尺寸要求。假设您颠倒了继承关系,以使Rectangle继承Square,那么您将通过放宽尺寸要求以允许Rectangle独立运行来削弱后期条件。
但是,如果要删除尺寸更改功能,则替换原则成立,因为如果Rectangle和Square都不能更改尺寸,则它们具有相同的前后条件,而与继承无关。两者都具有长度,都具有宽度,并且都不能改变这些值。
参考:Wikipedia-http://en.wikipedia.org/wiki/Liskov_substitution_principle