【问题标题】:Some confusion regarding inheritance关于继承的一些困惑
【发布时间】:2019-11-07 04:50:14
【问题描述】:

我正在读一本我不明白的书,下面提到了关于继承的 3 个问题:

1) 首先,您不能在运行时更改从父类继承的实现,因为继承是在编译时定义的。

2) 其次,通常更糟糕的是,父类通常至少定义其子类的部分物理表示。因为继承将子类暴露于其父类的实现细节,所以人们常说“继承破坏了封装”。

3) 子类的实现与其父类的实现如此紧密地联系在一起,以至于父类实现的任何变化都会迫使子类发生变化。

以上所有点都是在没有任何代码sn-p的情况下提及的,所以我对3点以上的理解有问题。

如果有人可以通过代码示例帮助我理解以上 3 点,以及每个点在代码中的影响和位置,我将不胜感激。

【问题讨论】:

  • Stackoverflow 是针对代码问题的,所以也许您可以通过一些简单的编码实验来尝试自己的示例?你甚至可以通过做得到一些答案。
  • @Kokodoko 我有点不同意,因为有很多关于这样的问题。例如这个怎么样(stackoverflow.com/questions/6308178/…
  • 这是出自哪本书?
  • @WimCoenen 它来自:设计模式,可重用的面向对象软件的元素。它以 pdf 格式在线提供
  • @Kokodoko 我非常感谢您的提示,但在这种情况下,我真的不明白这 3 点来编写一些代码,这就是我在这里问的原因

标签: oop inheritance language-agnostic


【解决方案1】:

1) 首先,您不能更改从父级继承的实现 类在运行时,因为继承是在编译时定义的。

这意味着两个类之间的继承关系是在你编写的代码中建立的,编译后,当代码执行时,这个是不能改变的。

2) 其次,通常更糟糕的是,父类通常至少定义 它们的子类的物理表示的一部分。因为继承 将子类暴露给其父类的实现细节,它是 常说“继承打破封装”。

如果您对某个父类进行子类化,通常意味着子类也与具有一些扩展和/或压倒性差异的父类相似。某些属性或行为是常见的,您可以访问它。两者之间存在一定程度的共享知识,您可以将其视为信息泄漏。如果要不惜一切代价保留封装,那么您就是在破坏它(但有充分的理由)。如果不是这样,继承就没用了。

3) 子类的实现与 其父类的实现,即父类的任何更改 实现将强制子类改变。

我没有这三个子句的上下文,但是是的,它们必须在一定程度上耦合,父类的变化对子类有多大影响取决于具体情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2019-10-26
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多