当前位置: 首页 > 面试题库 >

偏爱继承而不是继承

卫逸春
2023-03-14
问题内容

偏重于继承而不是继承

是非常流行的短语。我读了几篇文章,最后每篇文章都说

当类之间存在纯IS-A关系时,请使用继承。

本文中的一个示例:

AppleFruit 之间存在明显的IS-A关系,即Apple IS-A Fruit,但作者也将其显示为Apple HAS-A
Fruit(组成),以显示通过继承实现时的陷阱。

我在这里变得有些困惑,声明的含义是什么

当类之间存在纯IS-A关系时,请使用继承。

使用组合而不是继承是否意味着 即使* 存在纯IS-A关系,也总是 尝试 应用组合, 并且 仅在没有意义的情况下才 保留继承? *


问题答案:

当您使用继承重用超类中的代码,而不是重写方法并定义另一种多态行为时,通常表明您应该使用组合而不是继承。

java.util.Properties班是一个坏的使用继承的一个很好的例子。它没有 使用 哈希表来存储其属性,而是 扩展了
哈希表,以便重用其方法并避免使用委托重新实现其中的某些方法。



 类似资料:
  • 问题内容: 我想从Javadoc实现的接口继承Javadoc 。我在Javadoc命令中包含了源代码,并正确继承了文档。 现在,我想知道是否可以使它生成的链接指向Web上的文档,而不是在我的网站上复制它,即“ Specified by:”链接将链接到外部页面。 这可能吗? 问题答案: 有可能,是的。为了能够包含继承的文档,必须在javadoc的sourcepath中找到接口A的源,但不应在传递给用

  • 问题内容: 您对此设计决定有何看法?它有什么优点和缺点? 链接: 嵌入说明 问题答案: 在注释中,您想知道嵌入的想法是否足以“完全替换继承”。我会说这个问题的答案是“是”。几年前,我使用名为Snit的Tcl OO系统进行了非常简短的介绍,该系统使用组合和委派来排除继承。Snit与Go的方法仍然有很大不同,但是在这一方面,它们具有一些共同的哲学基础。这是一种将功能和职责结合在一起的机制,而不是类的层

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方

  • 有人能解释我这里发生了什么,为什么? 此代码的输出将是3 3,3,3。 如果我只用 getter 取消注释第 1 行,输出将是 3 2、2、2。 如果我只用setter取消对第2行的注释,输出将是1 1,1,1。 如果我取消对第1行和第2行的注释(用setter和getter),输出将是1 3,3,3。 如果用子类中的代码覆盖父类中的方法,则该覆盖方法不能访问私有成员变量,即使父类中被覆盖的方法可

  • 一个类可以从另一个类继承方法、属性和其他的特性。当一个类从另一个类继承的时候,继承的类就是所谓的子类,而这个类继承的类被称为父类。在 Swift 中,继承与其他类型不同的基础分类行为。 在 Swift 中类可以调用和访问属于它们父类的方法、属性和下标脚本,并且可以提供它们自己重写的方法,属性和下标脚本来定义或修改它们的行为。Swift 会通过检查重写定义都有一个与之匹配的父类定义来确保你的重写是正