首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在子类在overriden方法中增强先决条件的程序中会发生什么?

在子类在overriden方法中增强先决条件的程序中会发生什么?
EN

Stack Overflow用户
提问于 2018-06-04 10:42:47
回答 2查看 55关注 0票数 0

我对这个问题很困惑。我很乐意知道哪一个是正确的答案,以及为什么?

Liskov代换原理指出,它可以削弱超越方法的前提条件。在子类在overriden方法中增强先决条件的程序中会发生什么?

  1. 调用overriden方法后的代码可能会中断,因为它对overriden方法的返回值进行了假设。
  2. 可能不可能调用overriden方法,因为代码假设的先决条件较弱。
  3. 什么都不会发生--代码将一如既往地正确运行。
  4. 如果代码是用Java编写的,那么它可能无法编译。

谢谢你的建议!

EN

回答 2

Stack Overflow用户

发布于 2018-06-04 10:52:14

我会选择:

  1. 为true,因为影响参数的先决条件可能影响返回值。例如,一个数学函数,它只能取正数,并与他人一起给出意想不到的结果。
  2. 为false,如果该方法被覆盖,它将接受相同的参数类型,并具有相同的返回类型,并且可以调用。
  3. 不一定是对的,因此是假的,因为1。
  4. 是假的,因为同样的原因。
票数 2
EN

Stack Overflow用户

发布于 2018-06-04 11:43:31

一个强化的前提条件为可以传递给该方法的可能值设置了更严格的界限。换句话说,重写方法的域是基类方法的域的子集。因此:

  1. 如果增强的前提条件没有失败(即,如果调用代码在增强的前提条件所接受的子集中传递一个值),则该方法将返回与基类方法相同的结果(根据LSP的要求)。因此,调用代码不能在调用后中断。
  2. 这是正确的答案。考虑为任何整数定义的方法,该方法被重写为只接受正整数。调用不可能知道增强的前提条件,因为它是在多形性地访问子类,如果它传递了一个负整数(以前是有效的),则对子类的重写方法的调用将失败。
  3. 情况可能是这样,但不一定是真的。
  4. 情况可能是这样,但不一定是真的。

有关进一步阅读,请参见维基百科:协方差和反向协变方法参数类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50678747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档