这是一个颇具争议的话题,在你说"不"之前,真的,真的需要吗?
我已经编程了大约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 …Run Code Online (Sandbox Code Playgroud) language-agnostic inheritance language-features programming-languages