这是一个颇具争议的话题,在你说“不”之前,真的、真的需要吗?
我已经编程了大约 10 年,老实说,我无法回想起继承解决无法以其他方式解决的问题的时间。另一方面,当我使用继承时,我可以回忆起很多次,因为我觉得我必须这样做,或者因为我认为我很聪明并最终为此付出了代价。
从实现的角度来看,我真的看不出任何不能使用聚合或其他技术来代替继承的情况。
我唯一需要注意的是,我们仍然允许接口继承。
(更新)
让我们举例说明为什么需要它,而不是说“有时它只是需要”。这真的一点帮助都没有。你的证据在哪里?
(更新 2 代码示例)
这是经典的形状示例,更强大,更明确的 IMO,没有继承。在现实世界中,几乎从来没有真正“是”其他东西的情况。几乎总是“在条款中实施”更准确。
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();
}
}