最近我在面试中被问到:“你能举例说明有必要打破继承链吗?”。我不太确定我是否可以完全按照这个问题。
当我们打破继承链时,是否存在任何此类情况?
我试过谷歌,但没有得到任何线索。
答案 0 :(得分:6)
一个。当我们得到毫无意义的愚蠢问题时。
继承只是管理和重用代码的工具。组合是一个强大的工具,不属于“继承链”,所以我猜这是他们正在寻找的答案?
他们正在寻找的另一个可能的答案是利用接口。因为接口不需要“继承链”。它们使您能够更灵活地使用您的架构,并远离严格的继承“链”。
然而,问题意味着你有许多对象都是从彼此继承的,并且由于某种原因你在某处“破坏”了继承链。由于每个解决问题的OOP实现通常都是唯一的,因此没有“设置”原因。
面试官表达这个问题的方式几乎没有任何意义。这是一个糟糕的面试问题,不会导致最好的答案或者必然会告诉你关于候选人的任何事情,除非他们不理解你的疯狂;)。
编辑:添加了一些“更好”的问题。更好的问题包括:
Q值。继承和组成有什么区别?
问:我有以下课堂模型(一个人为界面而哭泣),我可以完全改进吗? 问:我正在重新设计基类,并希望阻止其他人覆盖此功能。我能这样做吗? 问:在类构造函数中调用虚方法是否有问题,如果是,那么什么?
答案 1 :(得分:0)
this blog post有一个很好的解释为什么你想要“打破继承链”(或“封印”你的班级)。