如何避免使用实现多个接口的类来破坏Liskov替换原则?
给定以下类:
class Example implements Interface1, Interface2 {
...
}
当我使用实例化类时:Interface1
Interface1 example = new Example();
...然后我只能调用方法,而不能调用方法,除非我强制转换:Interface1
Interface2
((Interface2) example).someInterface2Method();
当然,为了使此运行时安全,我还应该用检查来包装它:instanceof
if (example instanceof Interface2) {
((Interface2) example).someInterface2Method();
}
我知道我可以有一个扩展两个接口的包装器接口,但是我最终可能会得到多个接口,以满足同一类可以实现的所有可能的接口排列。所讨论的接口不会自然地相互扩展,因此继承似乎也是错误的。
当我询问运行时实例以确定其实现时,/cast 方法是否会中断 LSP?instanceof
无论我使用哪种实现,似乎都会在糟糕的设计或使用中产生一些副作用。