我正在编写一个具有 3 个特定类、ImageHandler
、TiffHandler
和JPEGHandler
.
JPEGHandler
并且TiffHandler
都扩展ImageHandler
。在所有 3 个类中都有一个名为 compress() 的方法,它压缩对象当前正在处理的任何图像。
我也在尝试创建一个单独的类来实现 Runnable,但我不想创建两个 Runnable 类,一个用于 TiffHandler,一个用于 JPEGHandler。我宁愿只创建一个可以接受 ImageHandler 对象的 Runnable 类。
我的问题是,由于 Runnable 类只有一个 ImageHandler 对象,所以每当我调用 compress() 时,它会在运行时抛出错误:
Uncompilable source code - compress() in fjimagecompressor.JPEGHandler cannot override compress() in fjimagecompressor.ImageHandler
overridden method does not throw java.io.IOException
第二行让我感到困惑,因为在 ImageHandler 内部我有一个名为 compress() 的空白方法:
public void compress() throws IOException{
/*blank*/
}
在 TiffHandler 和 JPEGHandler 内部,我也有 compress(),它会抛出 IOException,除了 compress() 会根据它是 JPEGHandler 还是 TiffHandler 做一些不同的事情。我不确定我是否只是错误地使用了多态性,或者我的超类 ImageHandler 中是否缺少某些内容。为什么编译器说超级方法不会抛出 IOException 而我确实声明它确实如此?