我为大多数类型使用接口/抽象基类,并且不经常从具体类继承,但是我最近遇到需要继承或组合的情况.我已经意识到一个界面“程序到界面而不是实现”,但最近决定深入挖掘.
我已经看到参数against inheritance,我已经看到了反对arguments,但我很好奇大型代码库的其他维护者实际上在现实生活中做了什么.恐惧是夸张吗?你是从具体的班级继承还是继承怀疑论者呢?我特别感兴趣的是那些在C工作的人的听力.
解决方法
不是C人(在c#,java和ruby中有大型企业系统的专业经验),但这里是我的2美分
这不是黑白的事情.
继承的问题是引入紧耦合.更糟糕的是,耦合通常是封装状态.超级类的变化可能会产生波纹效应,降低继承层次,创造微妙而难以预测的错误.
接口隔离完全避开这些问题,因为它不会以同样的方式破坏封装.
关于继承的好处是,有时候你有一个对象模型真的是一样的东西,只是一个很小的变化或增加.只要这种变化非常清楚,范围不广泛,而不是额外的约束(参见circle-ellipse问题),代码重用将胜过紧耦合.
我根据经验,坚持继承遗产,而不是法律.