2

最近我在一次采访中被问到:“你能举个例子说明什么情况下需要打破继承链吗?” . 我不太确定我是否可以完全遵循这个问题。

当我们打破继承链时,是否存在这种情况?

我尝试了谷歌,但没有得到任何线索。

4

2 回答 2

6

A. 当我们遇到毫无意义的愚蠢问题时。

继承只是管理和重用代码的工具。组合是一个强大的工具,不是“继承链”的一部分,所以我猜这是他们正在寻找的答案?

他们正在寻找的另一个可能的答案是利用接口。因为接口不需要“继承链”。它们使您的架构更加灵活,并远离严格的继承“链”。

然而,这个问题意味着您有许多对象都相互继承,并且由于某种原因,您在某处“打破”了继承链。没有“固定”理由为什么要这样做,因为解决问题的 OOP 的每个实现通常都是独一无二的。

面试官提出问题的方式几乎没有意义。这是一个糟糕的面试问题,不会给出最好的答案,也不会告诉你任何关于候选人的事情,除非他们也不理解你的疯狂;)。

编辑:添加了一些“更好”的问题。

更好的问题包括:

问:继承和组合有什么区别?
问:我有以下类模型(需要接口),我可以改进它吗?
问:我正在重新设计一个基类,并希望防止其他人覆盖此函数。我可以这样做吗?
Q. 在类构造函数中调用虚方法有问题吗?如果有,怎么办?

于 2013-09-11T15:30:19.217 回答
0

这篇博客文章很好地解释了为什么要“打破继承链”(或“密封”你的类)。

于 2013-09-11T15:31:53.667 回答