|
Post by account_disabled on Feb 1, 2024 20:23:47 GMT 10
假设我们定义个名为 的类型。这种类型的对象代表所有车辆。然后我们定义个名为 的子类型。只有乘用车才会有这种类型。无论何时使用 类型的对象都可以将其替换为 子类型的另个对象。这里的里氏替换原则是指替换对象后系统将按预期运行。 继承机制涉及在子类中使用基类已有的代码。这是种将字段和方法传递给另个类的方法。由于子类型化是通过继承实现的因此这些问题相互关联性很强而且它们之间的区别很难理解。 例子 假设我们正在创建个对几何图形执行某些操作的应用程序。 在程序的第个版本中定义了 类型它表示个矩形 在应用程序中的某个时刻我们有个计算矩代码可能如下所示 在本例中 函数将返回结果 。 段时间后有必要引入个新图形即正方形。我们知道从数学上来说正方形是长方形。因此按如下方式扩展 类似乎是个好主意 由于正方形的宽度和 电话数据 高度相等因此 基类的方法已被重写设置任何参数也会更改另个参数。使用新图形可能如下所示 返回的结果将是 。到目前为止切都工作正常但由于 类继承自 我们可以编写以下代码 结果是什么?结果将是。 因此我们会遇到这样的情况对于相同的值即 和 如果是 类的实例我们会得到 的乘积;如果是 类的实例我们会得到 的乘积。方类。这表明违反了 规则。 解决方案 由于出现的问题应修改应用程序代码。首先我们知道 类不能继承自 类。但是您可以为 几何图形创建个通用接口并在其中放置负责计算面积的方法的签名。这样执行此类操作的责任将从将图形对象作为参数的函数转移到各个接口实现。以下是此类代码的建议 在第种情况下我们计算矩形的面积我们将得到正确的结果 而在正方形的情况下面积将为。
|
|