我有一个班级,有公共API
我有其他班级从该班继承。
我没有使用从第一个类继承的所有API。
如果我改变了继承的顺序,那么我有更多的API方法,我不希望类继承。
语言:PHP和C#
答案 0 :(得分:4)
你有什么特别的理由想要这样的方法吗?我认为您应该考虑将您希望类的功能放在接口中。其他功能应该作为私有方法实现。
还要考虑将功能分解为几个类,然后使用Composition而不是继承。如果使用继承来组成复杂的类层次结构,则它们将始终难以管理。 You should favor composition over inheritance
答案 1 :(得分:4)
如果某些方法不应该在继承类中,则可能不应将其放在基类中。 第二类可以实现一些具有该方法的接口,或者由具有该方法并由当前基类继承的另一个类继承。
答案 2 :(得分:3)
我建议您使用Decorator pattern。
答案 3 :(得分:1)
如果我们调用基类B和派生类D1,D2 ......
有两种方法:
将B分为两类:私有实现(抽象B)和公共方法(您希望隐藏在其他2个类中),D3。所以要“使用”你实例化D3的基类。然后D1,D2只继承B的私有实现,因为“B”的公共接口只能通过D3获得。 (如果您仍然需要D1,D2中的某些公共功能但不希望它是公共的,那么只需将其添加为私有方法od B,然后在D3中添加公共代理方法,公开它并简单地调用到基类实现。
不要从B派生你的类。在D1,D2中嵌入一个B实例,只需在那些只提供“有限功能”的类中公开一个新接口。
答案 4 :(得分:1)
我没有使用从第一个类继承的所有API
将这些方法放入公开密封类
我有其他类从该类继承。
使用基类的接口和虚拟方法。