相关疑难解决方法(0)

是否应该从编程语言中删除(非接口类型的)继承?

这是一个颇具争议的话题,在你说"不"之前,真的,真的需要吗?

我已经编程了大约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

14
推荐指数
6
解决办法
1983
查看次数