这里的正确设计是什么(封装、多态、继承)?

What would be the correct design here (encapsulation, polymorphism, inheritance)?

假设我有一个接口和 3 或 4 个 类 实现该接口。现在假设我有另一种方法,但它只与一个或两个实现相关 类.

据我所知,有两种方法

  1. 在接口中声明方法,在所有类中实现。在 类 中,该方法不相关 - 抛出 "not supported" 异常。
  2. 仅在相关的实现 类 中声明该方法,然后您必须将实例从接口类型向下转换为特定类型才能调用该方法。 那么你的设计会在这里吗?为什么?

问问自己,使用 接口 的对象是否一定期望此函数存在? 无论您传递哪个接口实例,您仍然可以使用该方法是否重要?

如果该问题的答案是肯定的,1。如果不是,2。

您应该应用 interface segregation principle here, part of the SOLID 原则。与其拥有一个大接口,不如将接口拆分为几个较小的接口。仅在需要它的 类 中实现接口。

我会选择父界面。使满足接口的 类 实现该接口。创建第二个接口来扩展第一个接口并添加额外的方法,然后让剩余的 类 实现该接口。您仍然会针对接口而不是实现进行编码,并且您的所有设计原则都得到满足。