有时候人们想要在派生类中隐藏一个方法但是不想违反Liskov替换原则,所以他们把它留在那里而是抛出一个NotSupportedException
,可能带有这个方法抛出的注释
如果人们在传递派生类之前不去阅读每个方法的每个注释,那么将问题从编译时问题转移到运行时问题的意义上,这种做法是否同样糟糕甚至更糟? ?
答案 0 :(得分:2)
我同意如果一个子类不支持其超类中的方法,那么作为一项规则,它可能不应该扩展该类。除了要求运行时检查来处理你提到的可能的异常(这在需要优化性能的情况下可能是一个问题),然而,我认为这种方法的更大问题是它将责任从子类转移到每个类需要使用它,使您的软件更少封装,因此更难以维护和推理(软件越大,问题就越大)。
话虽如此,这个问题本质上是主观的。如果这种方法适合您,请务必这样做。我个人更喜欢简单的API而不是复杂的API,但这就是我。