实现不应调用的派生方法的最佳实践

use*_*541 8 java inheritance object-oriented-analysis

我有一个JAVA类A,它有一个方法foo

abstract class A {
  abstract void foo();
}
Run Code Online (Sandbox Code Playgroud)

我还有一个派生类A - MutableA.MutableA是一个单例对象,表示不需要更新,这对重用代码流很有用.永远不应该在MutableA上调用foo().实现这一目标的最佳方法是什么:

  1. 抛出不支持的异常
  2. 什么都不做(空实现)
  3. 这是一个糟糕的设计.

有人可以推荐我这种情况下的最佳做法是什么?

aio*_*obe 2

既然你说“不需要更新”,那么似乎空的实现才是正确的选择。如果我这样做怎么办:

A someA = createA();
someA.foo();           // make sure it's "foo"ed
Run Code Online (Sandbox Code Playgroud)

我不知道我是否回来了MutableA,所以我打电话foo来确定一下。

如果禁止调用,fooMutableA会同意UnsupportedOperationException或重新考虑设计。也许您可以包装A一个AHandler知道何时以及如何调用foo它包装的实例的知识。