这是一个颇具争议的话题,在你说“不”之前,真的、真的需要吗?
我已经编程了大约 10 年,老实说,我无法回想起继承解决无法以其他方式解决的问题的时间。另一方面,当我使用继承时,我可以记忆起很多次,因为我觉得我必须这样做,或者因为我认为我很聪明并最终为此付出了代价。
从实现的角度来看,我真的看不出任何不能使用聚合或其他技术来代替继承的情况。
我唯一需要注意的是,我们仍然允许接口(interface)继承。
(更新)
让我们举例说明为什么需要它,而不是说“有时它只是需要”。这真的一点帮助都没有。你的证据在哪里?
(更新 2 代码示例)
这是经典的形状示例,更强大,更明确的 IMO,没有继承。在现实世界中,几乎从来没有真正"is"其他东西的情况。几乎总是“在条款中实现”更准确。
public interface IShape
{
void Draw();
}
public class BasicShape : IShape
{
public void Draw()
{
// All shapes in this system have a dot in the middle except squares.
DrawDotInMiddle();
}
}
public class Circle : IShape
{
private BasicShape _basicShape;
public void Draw()
{
// Draw the circle part
DrawCircle();
_basicShape.Draw();
}
}
public class Square : IShape
{
private BasicShape _basicShape;
public void Draw()
{
// Draw the circle part
DrawSquare();
}
}
最佳答案
不,有时您需要继承。对于那些你不使用它的时候——不要使用它。您始终可以“仅”使用接口(interface)(在具有它们的语言中)和没有数据的 ADP 就像在那些没有它们的语言中的接口(interface)一样工作。但是我认为没有理由仅仅因为您觉得它并不总是需要而删除有时是必要的功能。
关于language-agnostic - 是否应该从编程语言中删除(非接口(interface)类型的)继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361371/