有没有办法拥有一个不会被继承的公共方法?

时间:2010-12-16 19:58:49

标签: c# php oop design-patterns

我有一个班级,有公共API 我有其他班级从该班继承。
我没有使用从第一个类继承的所有API。

如果我改变了继承的顺序,那么我有更多的API方法,我不希望类继承。

语言:PHP和C#

5 个答案:

答案 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

将这些方法放入公开密封

  

我有其他类从该类继承。

使用基类的接口和虚拟方法。